7

我有一个带有行数的数据网格。每行都有作为 DeleteRow 按钮。只有被选中的行应该有这个按钮可见。在我看来,可能至少有两种解决方案:

a) 将按钮的 Visibility-property 绑定到包含 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

谢谢

4

2 回答 2

12

由于Dependency Property Value Precedence,它不起作用。您不能更改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>
于 2012-09-06T14:23:01.890 回答
2

您可以使用BooleanToVisibiltyConverterWPF 提供的转换器来切换按钮的可见性 -

<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>
于 2012-09-06T17:39:59.870 回答