设置 ContentPresenter 中自动生成的文本块的样式

2024-01-27

正如我所看到的,很多人都遇到了这个问题,但我不明白为什么我的案例不起作用,它开始让我发疯。

背景:我有一个DataGrid将根据每个单元格的值着色。因此,我有一个动态样式来解析每个单元格使用的实际模板。背景现在可以相应地工作。

新问题:当我有深色背景时,我希望字体颜色为白色,字体粗细为粗体,以便文本可以正确阅读。而且...我无法正确设置它的样式。

我读过一些 Stackoverflow 的帖子:

这适合我的问题,但没有为我提供任何可行的解决方案 https://stackoverflow.com/questions/4739530/how-to-change-textblock-default-properties-for-a-contentpresenter-in-a-template 这也很清楚和详细,但是......呃 https://stackoverflow.com/questions/3063264/contentpresenter-within-controltemplate-cannot-change-attached-dependency-propert 这几乎与我相同的问题,但是......解决方案不起作用 https://stackoverflow.com/questions/3970285/wpf-4-contentpresenter-textwrapping-style-is-not-applied-to-implicitedly-generate

这是我到目前为止所尝试的:

<!-- Green template-->
    <ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
        <Grid Background="Green">
            <ContentPresenter
                            HorizontalAlignment="Center"
                                      VerticalAlignment="Center">
                <ContentPresenter.Resources>
                    <Style BasedOn="{StaticResource BoldCellStyle}" TargetType="{x:Type TextBlock}" />
                </ContentPresenter.Resources>
            </ContentPresenter>
        </Grid>
    </ControlTemplate>

不起作用。背景是绿色的,但文本保持黑色且不是粗体。

顺便说一句,BoldCellStyle 非常简单:

<Style x:Key="BoldCellStyle" TargetType="{x:Type TextBlock}">
    <Setter Property="FontWeight" Value="Bold"/>
    <Setter Property="Foreground" Value="White" />
</Style>

好的。第二次尝试(这确实是一个愚蠢的尝试,但好吧......)

<!-- Green template  -->
    <ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
        <Grid Background="Green">
            <ContentPresenter
                            HorizontalAlignment="Center"
                                      VerticalAlignment="Center">
                <ContentPresenter.Resources>
                    <Style x:Key="BoldCellStyle" TargetType="{x:Type TextBlock}">
                        <Setter Property="FontWeight" Value="Bold"/>
                        <Setter Property="Foreground" Value="White" />
                    </Style>

                </ContentPresenter.Resources>
            </ContentPresenter>
        </Grid>
    </ControlTemplate>

也不行。

然后,我尝试玩ContentPresenter的属性:

<!-- Green template -->
<ControlTemplate x:Key="Green" TargetType="{x:Type tk:DataGridCell}">
    <Grid Background="Green">
        <ContentPresenter TextElement.FontWeight="Bold" TextElement.Foreground="White" TextBlock.Foreground="White"
                        HorizontalAlignment="Center"
                                  VerticalAlignment="Center" />
    </Grid>
</ControlTemplate>

而且...正如您所料,这甚至不起作用。

出于好奇,我使用 Snoop 浏览了界面的所有组件。 在前两种情况下,Snoop 实际上向我展示了每个单元格都是一个Grid with a ContentPresenter含有一个TextBlock和实际的Style但是...TextBlock的属性不适用并且FontWeight还是正常的。

最后一个案例,更令人震惊的是,我可以看到窥探向我表明我们实际上有一个ContentPresenter具有正确的属性(即TextElement.FontWeight="Bold"),但是自动生成的TextBlock下面 - 仍然 - 没有样式。

我不明白我在这里缺少什么。正如你所看到的,我尝试了几乎所有我能在这里做的事情,并且TextBlocks 保持未格式化。

这里有什么想法吗?再次感谢!


The DataGridColumns源自于DataGridBoundColumn(除DataGridTemplateColumn)有一个属性ElementStyle这适用于TextBlock当它被创建时。例如DataGridTextColumn看起来像这样

static DataGridTextColumn()
{
    ElementStyleProperty.OverrideMetadata(typeof(DataGridTextColumn),
        new FrameworkPropertyMetadata(DefaultElementStyle));
    // ...
}

它覆盖元数据ElementStyle并提供一个新的默认值,DefaultElementStyle,这基本上只是设置默认边距TextBlock.

public static Style DefaultElementStyle
{
    get
    {
        if (_defaultElementStyle == null)
        {
            Style style = new Style(typeof(TextBlock));
            // Use the same margin used on the TextBox to provide space for the caret
            style.Setters.Add(new Setter(TextBlock.MarginProperty, new Thickness(2.0, 0.0, 2.0, 0.0)));
            style.Seal();
            _defaultElementStyle = style;
        }
        return _defaultElementStyle;
    }
}

每次新创建时都会在代码中设置此样式DataGridCell是用创建的element.Style = style;即使您尝试隐式设置它,这也会覆盖您尝试设置的样式。

据我所知,您必须为您的专栏重复此操作

<DataGridTextColumn Header="Column 1" ElementStyle="{StaticResource BoldCellStyle}" .../>
<DataGridTextColumn Header="Column 2" ElementStyle="{StaticResource BoldCellStyle}" .../>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 ContentPresenter 中自动生成的文本块的样式 的相关文章

  • Windows 8 和 LOB 应用程序

    为 Windows 8 构建业务线应用程序的推荐方法是什么 例如复杂的定制财务应用程序 它们显然不适合 Metro 风格 因此可能会成为常规桌面应用程序 那么建议使用WPF吗 有 vNext 吗 我作为开发人员构建的应用程序类型是桌面风格的
  • WPF 路径:如何在 XAML 中绘制它?

    我想创建一个带有非矩形标题的自定义 GroupBox 如下图所示 正如你所看到的 标题的内容必须是可参数化的 因此可以在xaml中输入图像 标题和背景 提前致谢 谢谢您的回答 实际上我想在自定义组框中使用这个设计 所以在你的答案中 如果我不
  • iTextSharp 从 WPF 固定文档生成 PDF

    我有一个简单的 WPF 应用程序 可以显示和打印一些内容 使用固定文档进行报告 如何使用免费且开放的解决方案从中生成 PDF 比如iTextSharp WPF 固定文档 也称为 XPS 文档 是对 PDF 的明显改进 它具有 PDF 所缺乏
  • WPF 窗口关闭后不会释放内存

    我创建了一个测试代码 private void Application Startup 1 object sender StartupEventArgs e ShutdownMode System Windows ShutdownMode
  • WPF ComboBox 中具有本地化名称的枚举

    我有一个列出枚举的组合框 enum StatusEnum Open 1 Closed 2 InProgress 3
  • WPF 应用程序在第一次交互(例如单击按钮)后停止/冻结

    我目前在 WPF 中遇到问题 UI 加载正常 但每当进行第一次用户交互时 例如单击按钮 应用程序似乎会停止 或者例如 如果我有两个显示 MessageBox 的按钮 则第一次单击将等待几秒钟 然后显示MessageBox 但任何后续交互都是
  • 背景颜色变化

    SolidColorBrush bgColor public ModernBTN InitializeComponent this Loaded delegate object sender RoutedEventArgs e bgColo
  • 我可以将这个 XAML 块变成可重用的“控件”吗?

    我有一个Grid 在那个网格中 我有这个
  • 如何制作wpf倒计时器?

    我想创建 wpf 倒数计时器 将结果显示为hh mm ss进入文本框 我将感谢任何人的帮助 您可以使用DispatcherTimer class msdn http msdn microsoft com en US library syst
  • 嵌套控件结构 - 使用 XAML 还是 C#?

    我想创建一个由相当多的元素组成的结构 它的基本布局如下
  • 如何在 MVVM 中使用应用程序命令

    我想使用 ApplicationCommands Cut 复制 粘贴 保存 它们看起来很有趣 因为命令路由 键绑定以及某些控件使用它们的事实 我了解如何绑定到虚拟机上的中继 委托命令 但我似乎无法理解应用程序命令 我找到了一些旧的答案 但没
  • 何时引发 Window.SourceInitialized 事件

    我能保证Window SourceInitialized事件总是会在Window Loaded事件 我需要HwndSource在我的中进一步处理的对象Window Loaded 事件处理程序我不确定到那时这是否总是可用 以下是您可以预期的事
  • 如何在 C# 中将 Wpf BitmapSource 转换为 byte[] [重复]

    这个问题在这里已经有答案了 可能的重复 WPF 图像到字节 https stackoverflow com questions 553611 wpf image to byte 相对于此 https stackoverflow com qu
  • 如何在WPF中使用一次性视图模型?

    如果视图模型引用非托管资源或具有事件处理程序 例如调度程序计时器上的处理已过去 如何确保视图模型得到正确处理 在第一种情况下 终结器是一种选择 虽然并不理想 但在后者中 它永远不会被调用 我们如何判断何时不再有视图附加到视图模型 我通过执行
  • App.Config 和 Web.Config 之间的区别?

    当在 wpf 中构建桌面应用程序时 您可以阅读问题文档并在人们的答案引用 web config 时安全地替换 app config 吗 如果是这样 您是否需要注意任何明显的陷阱 tnx 阅读文档 http msdn microsoft co
  • 如何从 WPF 窗口显示 Winforms 对话框?

    这个问题的反面已经被回答过很多次了 public static void SetOwner object activeWindow object dialog if IsWindow dialog IsWindow activeWindow
  • 在 WPF 树视图中获取 FullPath?

    如果我以编程方式创建 WPF TreeView 例如 TreeView treeView lt added in the designer TreeViewItem rootNode new TreeViewItem rootNode He
  • wpf 的 prism 与 mvvm light

    我们正在启动一个带有 MVVM 的 WPF 项目 并且必须决定使用 PRISM 还是 MVVM Light 我对这两个框架都是新手 我已经阅读了一些帖子 但仍然有一些问题 有人可以阐明以下几个方面吗 两个框架 性能 无论出于何种原因 其中一
  • 如何在 WPF 应用程序中实现气球消息

    我们想使用气球消息 如UX Guide http msdn microsoft com en us library aa511451 aspx来自微软 我发现一些示例使用 Windows 窗体中的本机代码 但本机代码需要组件的句柄 这对于
  • WPF。如何从另一个窗口隐藏/显示主窗口

    我有两个窗口 MainWindow 和 Login 显示登录的按钮位于主窗口 this Hide Login li new Login li Show 登录窗口上有一个检查密码的按钮 如果密码正确 我如何显示主窗口 将参数传递给 MainW

随机推荐

  • OpenCV - 如何在拼接图像的对应点之间进行映射

    我正在使用 OpenCV 3 2 并且设置了一个缝合器来缝合两个图像 缝合效果很好 但是一旦完成 我希望能够确定从图像 A 中的点到图像 B 中对应点的映射 我不关心图像在全景图中的布局方式 我只需要能够从 x A y A 图像 A 中的点
  • 从 power bi 公共嵌入中删除共享栏

    我有一份关于 power bi 的报告 已发布在网络上 我将在我的计算机上创建一个本地页面 以通过嵌入代码查看它 并在 Dropbox 上与其他人共享 我想删除带有社交媒体链接的按钮栏以防止共享 我还可以阻止显示 iframe 源链接吗 也
  • for 循环中的隐式内存别名

    我正在使用 golangci lint 并且在以下代码中收到错误 versions ObjectDescription populate versions for i v range versions res createWorkerFor
  • 如何在 postgresql 中创建 n-gram

    我希望在我的应用程序中具有搜索功能 我使用 trigram 来实现它 并且工作正常 问题是 trigram 正在创建单词的 3 个字符组的序列 我想要在单个对象中包含超过 3 个字符 例如 select show trgm abcpqrs
  • HTTP 缓存控制 max-age,必须重新验证

    我有几个与缓存控制相关的疑问 如果我指定缓存控制max age 3600 must revalidate对于静态 html js images css 文件 在 HTTP 标头中定义了 Last Modified 标头 浏览器 代理缓存 如
  • 从 Windows 服务启动 Windows 应用程序

    我正在尝试使用以下代码从 Windows 服务启动 Windows 应用程序 Process Start filename exe 在 Windows 7 中 我收到一个弹出窗口 显示 此计算机上运行的程序正在尝试显示一条消息 您无法从 W
  • Python subprocess.popen() 无需等待

    我在 Windows 上使用 Python 3 4 2 在 script1 py 中我正在这样做 myProc subprocess Popen sys executable script2 py argument myProc commu
  • iPhone 上奇怪的应用程序崩溃 - 没有被 Apple 拒绝

    我最近通过 iTunes Connect 向 Apple 提交了我的应用程序 它现在已在 iTunes 商店中 然而 当我把它下载到朋友的 iPhone 上时 它立即崩溃了 我在 iPhone 模拟器和 iPad 上进行了测试 我没有 iP
  • 可编辑数据表 RowKey Null

    我有一个可编辑的 Primefaces 数据表 配置为在编辑单元格时调用 onCellEdit 方法 一切工作都很好 除了 CellEditEvent rowKey 始终为 null 尽管在数据表声明中使用 rowKey 将其显式设置为有效
  • 在 Windows 上,如何检测文件的行结尾?

    我已经看到了这些问题的答案 但据我所知 这些答案并不是从 Windows 角度来看的 Windows 使用 CR LF Unix 使用 LF Mac 使用 LF 经典 mac 使用其他内容 我没有足够的智慧来告诉我 如果一个文件使用的行尾与
  • 如何使浏览器后退按钮忽略主题标签?

    我有一个网站 它使用哈希来打开 关闭当前页面上的一些选项卡和图层 使用哈希值的原因是 如果用户通过链接访问另一个页面 然后返回原始页面 则所有选项卡和图层的打开方式都应与离开该页面时完全相同 问题是 在第一页上并使用浏览器后退按钮时 只有哈
  • Bower:ENOGIT Git 未安装或不在 PATH 中

    Git 已安装并位于路径中 平台 红帽企业 Linux en wikipedia org wiki Red Hat Enterprise Linux 5 8 gt which git usr local bin git 然而 Bower 找
  • 基于窗口调整大小的 jQuery 位置元素

    如果您查看此页面 http dev driz co uk tips http dev driz co uk tips 我正在做一些实验来更多地了解 jQuery 以及如何开发类似于我们在 Facebook 上看到的东西 您将看到我有一个相对
  • Tensorflow.compat.v2.__internal__.tracking'没有属性'TrackableSaver'错误

    安装 Tensorflow js 后出现此错误 以前这个程序是有效的 会不会是版本的问题 我真的很好奇是什么原因造成的 提前致谢 File OneDrive Masa st Bitirme Proje neural network sini
  • Android - Google Map API v2 - 不幸的是,应用程序已停止。每次强制关闭

    大家好 我在这里找到了关于使用 Google Map API 时强制关闭 Android 中的应用程序的类似主题 我几乎尝试了所有方法 一步一步按照教程进行操作并检查了两次以上 每次出现问题并且我的应用程序都会立即崩溃 我什至无法运行 Go
  • Bootstrap-select插件:如何避免闪烁

    Bootstrap select 插件非常棒 http silviomoreto github io bootstrap select http silviomoreto github io bootstrap select 它提供了一种在
  • Ruby on Rails、Paperclip、Heroku、GitHub 和 AWS - 保护密钥

    我正在使用 Heroku 托管的 RoR 我想使用回形针将文件存储在 s3 上 我的源代码托管在 github 上 全世界都可读 对世界其他地方保密密钥的最佳做法是什么 Paperclip 建议将访问密钥存储在配置文件 或代码 中 例如我有
  • 使用单链表,如何在python中交换节点?

    目前 我一直在尝试根据我的主功能开关 myList index 重新排列链表 def createList plist linkedList None goes backwards adding each element to the be
  • 使用 XPath 提取标签之间的文本(包括标记)

    我有以下 XML 片段 span class st In Tim em Power em Politieman span 我想提取之间的部分 span 标签 为此 我使用 XPath span class st 然而 这将提取所有内容 包括
  • 设置 ContentPresenter 中自动生成的文本块的样式

    正如我所看到的 很多人都遇到了这个问题 但我不明白为什么我的案例不起作用 它开始让我发疯 背景 我有一个DataGrid将根据每个单元格的值着色 因此 我有一个动态样式来解析每个单元格使用的实际模板 背景现在可以相应地工作 新问题 当我有深