在选定的数据网格上显示一个按钮

The*_*erd 6 wpf datagrid visibility button selected

我有一个带有数字行的数据网格.每行都有DeleteRow按钮.只有选中的行才能显示此按钮.我认为可能至少有两种解决方案:

a)将按钮的Visibility属性绑定到包含DatGridRow的IsSelected属性

要么

b)使用按钮中的触发器仅在选择包含行时才可见.

这是我对选项b的代码,它不起作用:

<DataGridTemplateColumn Width="50">
<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Button Content="X" Tag="{Binding}" Click="DeletRow_Click" Visibility="Hidden">
            <Button.Style>
                <Style x:Name="ButtonVisibility">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource Mode=FindAncestor,AncestorType={x:Type DataGridRow}},Path=IsSelected}" Value="True">
                            <Setter Property= "Button.Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
Run Code Online (Sandbox Code Playgroud)

这可能很容易,但我一直盯着看,这让我眼花缭乱:S

谢谢

LPL*_*LPL 11

由于依赖属性值优先级,它不起作用.您无法更改a中的本地值Style.移动Visibility.HiddenStyle,它会工作.

<DataGridTemplateColumn.CellTemplate>
    <DataTemplate>
        <Button Content="X" Tag="{Binding}" Click="DeletRow_Click">
            <Button.Style>
                <Style x:Name="ButtonVisibility">
                    <Setter Property="Button.Visibility" Value="Hidden"/>
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}}, Path=IsSelected}" Value="True">
                            <Setter Property="Button.Visibility" Value="Visible"/>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Button.Style>
        </Button>
    </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
Run Code Online (Sandbox Code Playgroud)