2010-04-20 3 views
1

Je suis très nouveau sur WPF et j'avais besoin de quelques conseils pour expliquer pourquoi cela ne fonctionne pas correctement.Image ToggleButton multiple avec une image en surbrillance différente dans WPF

J'essaye de faire un bouton de maximisation qui changera en bouton de restauration quand on clique dessus. Je pensais qu'un bouton bascule avec 2 styles différents qui seraient modifiés dans le code derrière pourrait fonctionner. J'essaye d'abord de faire fonctionner le bouton de maximisation et ai rencontré un problème. Je reçois l'erreur 'System.Windows.Controls.Image' n'est pas une valeur valide pour la propriété 'System.Windows.Controls.Image.Source' sur un Setter. dans mon xaml. Il semble que je ne comprends pas complètement quelque chose. Toute aide serait très utile :)

Ryan

<Style x:Key="Maximize" TargetType="{x:Type ToggleButton}"> 
      <Style.Resources> 
       <Image x:Key="MaxButtonImg" Source="/Project;component/Images/maxbutton.png" /> 
       <Image x:Key="MaxButtonHighlight" Source="/Project;component/Images/maxbutton-highlight.png" /> 
      </Style.Resources> 
      <Setter Property="ContentTemplate"> 
       <Setter.Value> 
        <Image> 
         <Image.Style> 
          <Style TargetType="{x:Type Image}"> 
           <Setter Property="Source" Value="{DynamicResource MaxButtonImg}"/> 
           <Style.Triggers> 
            <Trigger Property="IsMouseOver" Value="True"> 
             <Setter Property="Source" Value="{DynamicResource MaxButtonHighlight}"/> 
            </Trigger> 
           </Style.Triggers> 
          </Style> 
         </Image.Style> 
        </Image> 
       </Setter.Value> 
      </Setter> 
     </Style> 


<ToggleButton Name="MaxButton" Width="31" Height="31" BorderThickness="0" Click="MaxButton_Click" Margin="0,0,10,0" Tag="Max" 
         Style="{DynamicResource Maximize}" /> 

Mon code serait derrière faire quelque chose de simple comme ceci:

private void MaxButton_Click(object sender, RoutedEventArgs e) 
    { 
     ToggleButton tg = (ToggleButton)sender; 

     if (tg.IsChecked == true) { 
      tg.Style = (Style)FindResource("Restore"); 
      this.WindowState = WindowState.Maximized; 

     } else { 
      tg.Style = (Style)FindResource("Maximize"); 
      this.WindowState = WindowState.Normal; 
     } 
    } 

Répondre

0

Vous ne voulez pas changer l'image de la souris. J'ai ajouté mes images à un dossier appelé Images dans le projet et définir l'action de construction sur les images à la ressource.

<Window.Resources> 

     <Image x:Key="minImage" Source="/Images/min.png" Height="16" Width="16" /> 
     <Image x:Key="maxImage" Source="/Images/max.png" Height="16" Width="16" /> 

     <Style TargetType="{x:Type ToggleButton}" x:Key="minMaxButtonStyle"> 
      <Setter Property="Content" Value="{DynamicResource minImage}" /> 
      <Style.Triggers> 
       <Trigger Property="IsChecked" Value="True"> 
        <Setter Property="Content" Value="{DynamicResource maxImage}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

    </Window.Resources> 

    <StackPanel> 

     <ToggleButton Style="{StaticResource minMaxButtonStyle}" /> 

    </StackPanel> 

</Window> 
+0

Cela fonctionne, mais j'utilise l'outil IsMouseOver pour créer une surbrillance, sans modifier l'image. Chaque état a 2 images, une image régulière et une souris sur l'image. J'ai réussi à obtenir le mien à travailler en définissant à et avoir la source de la propriété setter directement à l'image. – Ryan