2013-01-01 2 views
11

Ich möchte eine Ein/Aus-Schaltfläche in WPF erstellen und ich möchte, dass es sein Aussehen ändert, wenn der Benutzer darauf klickt (wenn es auf ausgeschaltet war, wenn Es wurde mit Bildern aktiviert. Ich habe die Bilder, die ich auf die Ressourcen verwenden möchten:In WPF kann ich die gleiche Bildressource zwischen zwei Schaltflächen teilen

<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> 

Und der Ereigniscode ist „Flag“ ist eine Boolesche lokale Variable initialisieren, wie wahr:

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

Jetzt muss ich erstellen 2 Ein/Aus-Tasten, die sich gleich verhalten. Wenn ich die gleichen Ressourcen für die zweite Schaltfläche verwenden versucht, bekam ich eine Ausnahme:

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

Kann ich die gleichen Bilder Ressourcen in der zweiten Taste verwenden, oder muss ich die Bilder wieder als Ressourcen mit unterschiedlichen Key hinzufügen ?

Antwort

11

Sie sollten BitmapImage für die gemeinsame Nutzung von Bildern verwenden.

<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"/> 

Danach können Sie mit Bitmap Multiple Image erstellen

In XAML

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

In-Code

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

Während @ Tilak-Lösung ist auf jeden Fall eine Möglichkeit, Sie gehen kann dies auch über Style.Triggers

tun

Hier ist ein Beispiel (mit der Annahme, dass Flag eine öffentliches Eigentum aussetzt 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

Sets in Ihrem Stil falschen

<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}" /> 
Gemeinsamen

Verwandte Themen