我有一个行数为ow的数据网格。每一行都有as DeleteRow-button。只有选定的行才能使此按钮可见。在我看来,至少有两种解决方案:
a)将按钮的可见性属性绑定到包含的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>
这可能真的很简单,但我一直盯着它看,这让我眼花缭乱:
谢谢
发布于 2012-09-06 22:23:02
它不能工作是因为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>发布于 2012-09-07 01:40:00
您可以使用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>https://stackoverflow.com/questions/12302031
复制相似问题