XAML更改Togglebutton中的图像源

时间:2013-02-14 09:06:58

标签: c# wpf visual-studio-2010 xaml

当Togglebutton“IsPressed”为true时,我正在尝试更改图像源(仅限XAML)。但当我试图通过''Image.Trigger'绑定该属性时,它无法正常工作。

这就是我现在所拥有的,图像显示的完全像我想要的那样。

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

2 个答案:

答案 0 :(得分:5)

尝试在该图像的样式中设置Image的触发器。这是代码

<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仅为True,但是当您释放时IsPressed将变为False。 ToggleButton类有IsChecked属性,可以存储状态。

答案 1 :(得分:0)