2013-02-14 64 views
1

當「ToggleButton」IsPressed爲true時,我試圖更改圖像源(僅限XAML)。但是當iam嘗試通過''Image.Trigger'綁定該屬性時,它不起作用。XAML更改Togglebutton中的圖像源

這就是我現在所擁有的圖像顯示完全像我想要的。

<ToggleButton x:Name="pbStations" 
       Template="{StaticResource ContentOnlyTemplateToggleButton}"> 
    <StackPanel Orientation="Horizontal"> 
    <Image Source="/Sprites/Misc/ExpanderButtonClose.png" 
      Margin="2" 
      Stretch="Uniform" 
      x:Name="img"> 
    </Image> 
    <TextBlock Text="STATIONS" 
       x:Name="tbStations" 
       Style="{StaticResource tbTriggerGray}" /> 
    </StackPanel> 
</ToggleButton> 

這就是我試圖不工作:

<ToggleButton x:Name="pbStations" 
       Template="{StaticResource ContentOnlyTemplateToggleButton}"> 
    <StackPanel Orientation="Horizontal"> 
    <Image Source="/Sprites/Misc/ExpanderButtonClose.png" 
      Margin="2" 
      Stretch="Uniform" 
      x:Name="img"> 
     <Image.Triggers> 
     <DataTrigger Binding="{Binding ElementName=pbStations,Path=IsPressed}" 
        Value="True"> 
      <Setter TargetName="img" 
        Property="Image.Source" 
        Value="/Sprites/Misc/ExpanderButtonOpen.png" /> 
     </DataTrigger> 
     </Image.Triggers> 
    </Image> 
    <TextBlock Text="STATIONS" 
       x:Name="tbStations" 
       Style="{StaticResource tbTriggerGray}" /> 
    </StackPanel> 
</ToggleButton> 

回答

5

嘗試設置的圖像觸發風格該圖像內。這裏是代碼

<ToggleButton x:Name="pbStations" 
       Template="{StaticResource ContentOnlyTemplateToggleButton}"> 
    <StackPanel Orientation="Horizontal"> 
     <Image Margin="2" 
       Stretch="Uniform" 
       x:Name="img"> 
     <Image.Style> 
      <Style TargetType="Image"> 
      <Style.Triggers>         
       <DataTrigger 
        Binding="{Binding ElementName=pbStations,Path=IsPressed}" 
        Value="True">   
       <Setter Property="Source" 
         Value="/Sprites/Misc/ExpanderButtonOpen.png" /> 
       </DataTrigger> 
       <DataTrigger 
        Binding="{Binding ElementName=pbStations,Path=IsPressed}" 
        Value="False">   
       <Setter Property="Source" 
         Value="/Sprites/Misc/ExpanderButtonClose.png" /> 
       </DataTrigger> 
      </Style.Triggers> 
     </Style> 
    </Image.Style> 
     </Image> 
     <TextBlock Text="STATIONS" 
        x:Name="tbStations" 
        Style="{StaticResource tbTriggerGray}" /> 
    </StackPanel> 
</ToggleButton> 

我把所有的圖像設置邏輯移動到2個數據觸發器。原因是WPF引擎會在執行DataTrigger後評估您的Image的Source屬性,因此DataTrigger的Setter將具有比手動設置圖像的Source屬性更低的優先級。

請注意,只有當您按住鼠標左鍵時IsPressed才爲真,但當您釋放它時,IsPressed將變爲False。有可以存儲狀態的ToggleButton類的IsChecked屬性。

+0

Blablablaster嗨, 我想你的做法,但我得到一個「XamlParseException」當IAM試圖調試,當我檢查的細節我可以看到,它說,根據「的InnerException」 - >「{」找不到資源'sprites/misc/expanderbuttonopen.png'。「} 而在Setters中,我不能使用」TargetName =「img」「,因爲它表示找不到名稱 – hijack 2013-02-14 10:11:44

+0

我刪除了TargetName =「img」,所以xaml現在應該沒問題。仔細檢查ExpanderButtonOpen.png,如果路徑正確嗎? – Blablablaster 2013-02-14 10:22:51

+0

感謝您的幫助!:)您對圖像路徑的正確性。 – hijack 2013-02-14 11:00:53