【问题标题】:WPF DataGrid top-left button set/view Content?WPF DataGrid 左上角按钮设置/查看内容?
【发布时间】:2019-07-30 20:10:35
【问题描述】:

试图在运行时设置 WPF DataGrid 左上角按钮的 Content 属性。我使用 DataGrid 对象的 VisualTreeHelper 获取按钮对象,然后成功设置其 Content 属性,在运行应用程序时使用 Snoop 进行了验证。但是,按钮文本不可见。我怀疑这是因为按钮顶部的 UI 元素使用了不透明的背景画笔。在阅读docs 时,我看到一个使用故事板的网格和一个使用渐变画笔的矩形。

除了编辑 WPF DataGrid 左上角按钮样式模板之外,我还有哪些选项可以使按钮内容(文本)可见?

【问题讨论】:

  • 您是否考虑过在数据网格上放置一个控件?将其设为 ishitestvisible=false,您仍然可以单击数据网格的按钮。

标签: wpf button datagrid


【解决方案1】:

您可以完全替换模板。

我更愿意亲自将文本块的文本绑定到视图模型中的属性。

这可以让你开始。

把它放在数据网格的范围内,比如你的窗口资源或合并在 app.xaml 中的资源字典。

    <Style x:Key="{ComponentResourceKey ResourceId=DataGridSelectAllButtonStyle, TypeInTargetAssembly={x:Type DataGrid}}" TargetType="{x:Type Button}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Border Background="Red">
                        <TextBlock Text="X" Foreground="White"/>
                    </Border>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

需要更多工作,但它显示在我拥有的数据网格示例中。

(这是从实验中回答问题的数十种风格的东西)。

【讨论】:

    【解决方案2】:

    (发生了一些有趣的事情,我现在使用与以前相同的用户名发帖,但我坚持每次登录时都必须重新创建我的个人资料。去图吧。)

    感谢安迪提出的解决方案。由于上述技术原因,我无法将此问题标记为“已解决”。

    现在我认为解决此问题的一种快速方法是在 DataGrid 按钮的顶部放置一个透明标签,其中 IsHitTestVisible = false。不过,我注意到了一些有趣的事情:

    • 似乎按钮可以有一个网格或一个字符串作为内容,但不能同时有;
    • 当 DataGrid Loaded 事件处理程序运行时,按钮已经创建,例如,可以向其添加 Click 事件处理程序;但是,此时将 Content 设置为字符串不会改变任何内容。我猜在填充 DataGrid 时内容会发生变化。

    【讨论】:

      猜你喜欢
      • 2016-12-24
      • 2013-01-08
      • 2011-06-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-28
      相关资源
      最近更新 更多