首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在选定的datagridrow上显示按钮

在选定的datagridrow上显示按钮
EN

Stack Overflow用户
提问于 2012-09-06 22:09:39
回答 2查看 5K关注 0票数 7

我有一个行数为ow的数据网格。每一行都有as DeleteRow-button。只有选定的行才能使此按钮可见。在我看来,至少有两种解决方案:

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

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

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

代码语言:javascript
复制
<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>

这可能真的很简单,但我一直盯着它看,这让我眼花缭乱:

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-06 22:23:02

它不能工作是因为Dependency Property Value Precedence。您不能在Style中更改本地值。将Visibility.Hidden移到Style中,它就可以工作了。

代码语言:javascript
复制
<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>
票数 12
EN

Stack Overflow用户

发布于 2012-09-07 01:40:00

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

代码语言:javascript
复制
<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>
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12302031

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档