我有一个带有行数的数据网格。每行都有作为 DeleteRow 按钮。只有被选中的行应该有这个按钮可见。在我看来,可能至少有两种解决方案:
a) 将按钮的 Visibility-property 绑定(bind)到包含 DatGridRow 的 IsSelected-property
或者
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>
这可能真的很容易,但我一直盯着它看,现在让我眼花缭乱:S
谢谢
最佳答案
它不起作用,因为 Dependency Property Value Precedence .您不能更改 Style
中的本地值.移动Visibility.Hidden
进入 Style
它会起作用。
<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>
关于wpf - 在选定的数据网格上显示一个按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12302031/