2013-01-01 6 views
11

Chcę utworzyć przycisk wł./Wył. W WPF i chcę, aby zmieniał swój wygląd, gdy użytkownik kliknie (jeśli był włączony, aby wyłączyć, jeśli włącza się, aby włączyć) za pomocą obrazów. dodałem obrazy chcę korzystać z zasobów:W WPF, mogę udostępnić ten sam zasób obrazu między 2 przyciskami

<Window.Resources> 
    <Image x:Key="Off1" Source="/WPFApplication;component/Images/off_button.png" Height="30" Width="70" /> 
    <Image x:Key="On1" Source="/WPFApplication;component/Images/on_button.png" Height="30" Width="70"/> 
</Window.Resources> 

I kod zdarzenia jest „flaga” to logiczna zmienna lokalna zainicjować jako prawdziwe:

private void OnOff1Btn_Click(object sender, RoutedEventArgs e) 
    { 
     if (flag) 
     { 
      OnOff1Btn.Content = FindResource("Off1"); 
      flag = false;  
     } 
     else 
     { 
      OnOff1Btn.Content = FindResource("On1"); 
      flag = true; 
     } 
    } 

Teraz trzeba utworzyć 2 przyciski włączania/wyłączania, które zachowują się tak samo. Kiedy próbowałem korzystać z tych samych zasobów dla drugiego przycisku mam wyjątek:

Specified element is already the logical child of another element. Disconnect it first. 

mogę wykorzystać te same obrazy zasobów w drugim przyciskiem czy mam dodać zdjęcia ponownie jako środków z innego klucza ?

Odpowiedz

11

Powinieneś używać BitmapImage do udostępniania zdjęć.

<BitmapImage x:Key="Off1" UriSource="/WPFApplication;component/Images/off_button.png" Height="30" Width="70" /> 
<BitmapImage x:Key="On1" UriSource="/WPFApplication;component/Images/on_button.png" Height="30" Width="70"/> 

Po tym można utworzyć wiele Image z BitmapImage

W XAML

<Button ..> 
    <Button.Content> 
    <Image Source="{StaticResource Off1}" /> 
    </Button.Content> 
</Button> 

w kodzie

Image image = new Image(); 
    image.Source = FindResource("Off1"); 
    OnOff1Btn.Content = image; 
1

Podczas @ rozwiązanie Tilak jest zdecydowanie jedna droga, ty może to również zrobić przez Style.Triggers

Oto przykład (przy założeniu, że Flag jest własnością publiczną wystawiając flagę):

<Button Content="{StaticResource On1}"> 
    <Button.Style> 
     <Style> 
      <Style.Triggers> 
       <DataTrigger Binding="{Binding Flag}" Value="false"> 
        <Setter Property="Content" Value="{StaticResource Off1}" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Button.Style> 
</Button> 
8

Set wspólna w swoim stylu do fałszywego

<StackPanel > 
    <StackPanel.Resources> 
     <Image x:Key="flag" Source="flag-italy-icon.png" Width="10" x:Shared="false"/> 
    </StackPanel.Resources> 

    <ContentControl Content="{DynamicResource flag}" /> 
    <ContentControl Content="{DynamicResource flag}" /> 

Powiązane problemy