2013-02-14 63 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