2010-04-20 103 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