单击数据网格单元格中的按钮时更改按钮的图像 - wpf

本文关键字:按钮 图像 wpf 数据 网格 单元格 单击 数据网 | 更新日期: 2023-09-27 18:32:00

我有一个WPF应用程序,其中包含一个由一列按钮组成的数据网格。相应的 XAML 代码如下所示。

<DataGridTemplateColumn Header="Closed" Width="60">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <Button>
                <Button.Content>
                    <Image>
                        <Image.Source>
                            <MultiBinding Converter="{StaticResource ImageConverter}"
                                  ConverterParameter="Closed">
                                <Binding Path="IsClosed"/>
                                <Binding Path="DataContext.TickImage" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"/>
                                <Binding Path="DataContext.CrossImage" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"/>
                            </MultiBinding>
                        </Image.Source>
                    </Image>
                </Button.Content>
                <Button.Command>
                    <Binding Path="DataContext.ClosedClicked" RelativeSource="{RelativeSource FindAncestor, AncestorType={x:Type UserControl}}"/>
                </Button.Command>
            </Button>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

TickImageCrossImage是图像源,其中任何一个都是根据 IsClosed 的值选择的。现在在ViewModel中,我需要编写一个代码来在单击按钮时切换图像(黑白TickImageCrossImage)。换句话说,我需要一种方法来同时将 Button 与ICommandBitmapImage变量绑定。

请帮忙!!

单击数据网格单元格中的按钮时更改按钮的图像 - wpf

如果您的IsClosed只是一个切换,以了解按钮是按下还是松开,那么您只需使用如下所示的触发器即可实现此目的:

 <ToggleButton>
     <ToggleButton.Content>
         <Image>
            <Image.Style>
              <Style TargerType="Image">
                <Setter Property="Source" Value="{Binding Path="DataContext.TickImage" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"/>
                 <Style.Triggers>
                      <DataTrigger Binding="{Binding IsChecked, RelativeSource="{RelativeSource AncestorType={x:Type ToggleButton}}" Value="true">
                         <Setter Property="Source" Value="{Binding Path="DataContext.CrossImage" RelativeSource="{RelativeSource AncestorType={x:Type UserControl}}"/>
                      </DataTrigger>
                  </Style.Triggers>
                </Style>
             </Image.Style>
            </Image>
          </ToggleButton.Content> 
        </ToggleButton>