1

当切换按钮“IsPressed”为真时,我正在尝试更改图像源(仅在 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>
4

2 回答 2

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 仅在您按住鼠标左键时为 True,但当您释放它时,IsPressed 将变为 False。ToggleButton 类有 IsChecked 属性,可以存储状态。

于 2013-02-14T09:34:42.973 回答
0

使用 WinRT 工具包。

Win RT XAML 工具包中的 UI 控件概述

于 2013-12-18T08:55:48.057 回答