我有一个带有数字行的数据网格。每行都有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>
这可能很容易,但我一直盯着它,现在让我眼花缭乱:S
感谢
答案 0 :(得分:11)
由于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>
答案 1 :(得分:2)
您可以使用WPF提供的转换器BooleanToVisibiltyConverter
来切换按钮的可见性 -
<DataGrid>
<DataGrid.Resources>
<BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter"/>
</DataGrid.Resources>
<DataGrid.Columns>
<DataGridTemplateColumn Width="50">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Button Content="X" Tag="{Binding}"
Visibility="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter},
RelativeSource={RelativeSource FindAncestor, AncestorType=DataGridRow}}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>