2010-04-20 74 views
1

我对WPF来说很新,需要一些指针来说明为什么它不能正常工作。WPF中具有不同高亮图像的多个ToggleButton图像

我试图做一个最大化的按钮,当点击时会变成恢复按钮。我认为有两种不同风格的切换按钮可以在后面的代码中进行更改。我首先尝试使最大化按钮工作并遇到问题。我得到的错误'System.Windows.Controls.Image'不是Setter上'System.Windows.Controls.Image.Source'属性的有效值。在我的xaml中。我似乎没有完全理解某些东西。任何帮助将是最有帮助:)

瑞安

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

后面我的代码会做一些简单的像这样:

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

回答

0

你不想过度改变鼠标的图像。我将我的图像添加到项目中名为Images的文件夹中,并将图像的构建操作设置为Resource。

<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

这样做的工作,但我使用IsMouseOver创建高亮,而不是改变图像。每个州有2个图像,一个常规图像和一个鼠标悬停图像。我可以通过将设置为并让setter属性源直接转到图像来让我的工作。 – Ryan 2010-04-20 17:54:00