XAML更改Togglebutton中的图像源

hij*_*ack 1 c# wpf xaml visual-studio-2010

当Togglebutton"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>
Run Code Online (Sandbox Code Playgroud)

这是我试过的不起作用:

<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>
Run Code Online (Sandbox Code Playgroud)

Bla*_*ter 5

尝试在该Image的样式中设置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>
Run Code Online (Sandbox Code Playgroud)

我将所有图像设置逻辑移到了2个数据触发器中.原因是WPF引擎将在执行DataTrigger后评估您的Image的Source属性,因此DataTrigger的Setter将具有比手动设置图像的Source属性更低的优先级.

请注意,当您按住鼠标左键时,IsPressed仅为True,但是当您释放时,IsPressed将变为False.ToggleButton类有可以存储状态的IsChecked属性.