WPF 仅更改组合框的 PART_EditableTextBox 上的属性

2024-01-11

我想更改默认 wpf 组合框的 PART_EditableTextBox (例如更改背景)。

我尝试添加这样的样式:

<Style TargetType="{x:Type ComboBox}" BasedOn="{StaticResource {x:Type ComboBox}}">
  <Setter Property="Control.Template">
    <Setter.Value>
      <ControlTemplate TargetType="ComboBox">
        <TextBox x:Name="PART_EditableTextBox" Background="AntiqueWhite"/>
      </ControlTemplate>
    </Setter.Value>
  </Setter>
</Style>

但这会导致默认模板的其余部分被忽略。

有没有办法可以覆盖 PART_EditableTextBox 的特定属性,或者我是否必须复制整个控件模板并在其中进行更改?


改变控件外观的一些不同方法......

复制控件模板、编辑它并在样式中使用它

当复制和修改控件的模板时...您必须记住一件事...主题。

根据主题(即不同的镶边),控件可能具有完全不同的模板设计...所以您的问题是...您选择复制、修改然后在控件上使用哪个模板。

不管您选择哪一个...您都会遇到问题...当有人在与您从中复制模板的主题不同的主题中运行 Windows 时...那么该控件将看起来错误/不正确地方。

要查看不同模板在不同主题中的外观...使用 ShowMeTheTemplate:

  • http://www.sellsbrothers.com/posts/details/2091 http://www.sellsbrothers.com/posts/details/2091

因此,要正确执行此操作,您必须复制和修改每个主题(Classic、Luna、Aero、Royale 等)的模板,并执行必要的步骤,以便在主题更改时加载不同的主题模板...这样您的控件就具有“主题意识”。

  • 覆盖 WPF 模板时,是否必须单独覆盖每个主题的模板? https://stackoverflow.com/questions/2515468/when-overriding-wpf-templates-do-i-have-to-override-each-themes-template-separa

  • http://windowsclient.net/blogs/nidonocu/archive/2008/02/16/wpf-themes-and-control-libraries.aspx http://windowsclient.net/blogs/nidonocu/archive/2008/02/16/wpf-themes-and-control-libraries.aspx

  • http://blogs.windowsclient.net/nidonocu/archive/2008/03/03/wpf-themes-and-control-libraries-part-2.aspx http://blogs.windowsclient.net/nidonocu/archive/2008/03/03/wpf-themes-and-control-libraries-part-2.aspx

在运行时应用模板后修改可视化树

如果您是控件的作者或者您创建了控件的派生版本...那么您可以等到应用模板,然后再OnApplyTemplate...然后您可以在可视化树中寻找“零件”,然后在运行时修改可视化树/更改属性(即您可以更改 PART_EditableTextBox 的背景)。

但是,如果您依赖隐式样式(就像您一样),或者不想或无法将所有控件替换为 XAML 中的派生版本,则此方法不起作用。


在运行时获取 ControlTemplate 的副本,并修改“部分”

还有另一种可能性...在运行时获取控件的 ControlTemplate...(这将用于当时设置的当前主题)...修改它,然后将其设置到控件上。

这样做的好处是,如果系统中存在您事先不知道其名称的新主题(因此没有为其设计模板),那么您的控件模板就不是从通用主题中选取的(因此不合适)......你有更好的机会让外观更好地适应新主题。但这有点像黑客。

  • https://siderite.dev/blog/cloning-wpf-controltemplate.html https://siderite.dev/blog/cloning-wpf-controltemplate.html

  • 在运行时定义 WPF ControlTemplate https://stackoverflow.com/questions/732736/define-a-wpf-controltemplate-at-runtime

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WPF 仅更改组合框的 PART_EditableTextBox 上的属性 的相关文章

  • WPF 中的调度程序和异步等待

    我正在尝试学习 WPF C 中的异步编程 但我陷入了异步编程和使用调度程序的困境 它们是不同的还是在相同的场景中使用 我愿意简短地回答这个问题 以免含糊不清 因为我知道我混淆了 WPF 中的概念和函数 但还不足以在功能上正确使用它 我在这里
  • 从固定文档中删除页面?

    如何从固定文档中删除页面 我添加这样的页面 Add page to pageContent PageContent pageContent new PageContent IAddChild pageContent AddChild fix
  • 异步WCF调用来保存线程?

    In 另一个问题 https stackoverflow com q 19731600 279516 建议我发送异步网络请求 而不是在后台线程上发送同步请求 原因是为了不浪费一根线 我试图理解这是怎么回事 这是最初的做法 我可以理解这里怎么
  • 如何防止在 ActiveX 方法调用期间重新进入 WPF 事件处理程序?

    我们从 WPF 和 STA 应用程序中调用 ActiveX 组件上的方法 此调用是通过以下方式后期绑定执行的 res ocx GetType InvokeMember methodName flags null ocx args 其中 oc
  • WPF 错误:属性元素不能位于元素内容的中间。它们必须位于内容之前或之后

    我有一个MergedDictionaries and DateTemplate里面一个ResourceDictionary一切都很好 直到我添加了一个Converter
  • 在视口中查找 WPF 控件

    Updated 这可能是一个简单或复杂的问题 但在 wpf 中 我有一个列表框 我用一个填充数据模板从列表中 有没有办法找出特定的数据模板项位于视口中 即我已滚动到其位置并且可以查看 目前我连接到了 listbox ScrollChange
  • WPF DataGridTemplateColumn 组合框更新所有行

    我有这个 XAML 它从 ItemSource 是枚举的组合框中选择一个值 我使用的教程是 http www c sharpcorner com uploadfile dpatra combobox in datagrid in wpf h
  • 打印大型 WPF 用户控件

    我有一个巨大的数据 我想使用 WPF 打印 我发现WPF提供了一个PrintDialog PrintVisual用于打印派生的任何 WPF 控件的方法Visual class PrintVisual只会打印一页 因此我需要缩放控件以适合页面
  • 在后台进程中访问 WPF FlowDocument

    在后台访问 WPF FlowDocument 我的问题涉及在 WPF 后台访问 UI 对象 我见过几十个示例应用程序 它们都很简单 易于理解 其中 95 告诉你如何显示进度条 这并不是我想要的 我的问题是这样的 我想通过访问 RichTex
  • 如何从作为 UWP 运行的 WPF 应用程序处理文件激活?

    我有一个WPF我想要处理文件激活的应用程序 我找到了通过向注册表添加特定值来解决问题的解决方案 问题是最终的应用程序应该是UWP应用程序 我正在使用桌面桥来执行此操作 如果应用程序运行为UWP 它无法到达注册表来设置这些特定值 有没有其他方
  • 命令绑定问题。如何启用命令按钮

    我的代码在这里 gt gt public class Player INotifyPropertyChanging string addressBar public string Url get return addressBar set
  • 使用 Assembly.ReflectionOnlyLoadFrom 加载 WPF 项目引用的程序集时出现奇怪的 FileLoadException

    我有一个自定义 MSBuild 任务 可以查看程序集内部以获取一些属性元数据 Assembly assembly Assembly ReflectionOnlyLoadFrom AssemblyFile 这是我们的自动化构建 发布流程所使用
  • 使用路径=。和绑定内的转换器

    我无法为 TreeViewItems 定义触发器 我相信这只是一些语法问题 但我不知道还要写什么 这是触发器
  • C#:将音频文件从服务器流式传输到客户端

    我目前正在编写一个应用程序 该应用程序将允许用户安装某种形式的应用程序 可能是 Windows 服务 该应用程序将在其 PC 上打开一个端口 并在硬盘上指定一个特定的目的地 然后能够流式传输 mp3 文件 然后 我将有另一个应用程序 该应用
  • 使用 RenderTargetBitmap 的 WPF 画布区域的快照

    我想在我的应用程序中创建画布区域的快照 我使用 Visual Brush 来获取快照并使用 PngEncoder 保存相同的快照 但生成的 PNG 只是一个空的黑色图像 我不确定问题是与创建的 BitmapSource 还是 PNGEnco
  • 将 RoutedEvent 转换为 WPF 中 MVVM 模式的命令

    如何将 Checkbox checked 路由事件转换为 MVVM 模式的命令 参考 考虑按钮单击路由事件 当我们为按钮分配命令时 button click 事件被视为命令 它执行相应的命令 我用谷歌搜索了它 我得到了 EventBehav
  • 测量 WPF 中的文本

    使用WPF 测量大量短字符串最有效的方法是什么 具体来说 我想确定每个字符串的显示高度 给定统一格式 相同的字体 大小 粗细等 以及字符串可能占用的最大宽度 最低级的技术 因此为创意优化提供了最大的空间 是使用 GlyphRuns 它没有很
  • WPF KeyGestures - 绑定非字母数字键

    Should be a simple one but I can t work out how to do it Using WPF4 I want to Bind Ctrl to Zoom Out and Ctrl to Zoom In
  • 从 StaticResource 设置 RowDefinition 高度

    在我的 WPF 样式中 我定义了一个标准网格行高 我想将其应用到几个地方 如下所示
  • 无法继承形状

    为什么我不能使用继承 a 的类Shapes class http msdn microsoft com en us library ms604615 28v vs 90 29 我需要延长Rectangle具有一些方法的类 但我想以与使用相同

随机推荐