c# - SystemResourceKey 引用的 WPF 视图样式
问题描述
我正在尝试复制Style
. DataGridComboBoxColumn's
TextBlockComboBox
这是DataGridComboBoxColumn
当不编辑列的单元格时使用的控件。我可以通过查看referencesource.microsoft.com上的源来了解此控件(我会尝试直接链接到有问题的类型,但我工作笔记本电脑上的浏览器有一个破坏 URL 的安全插件)。这是该来源的一个片段:
internal class TextBlockComboBox : ComboBox
{
static TextBlockComboBox()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(TextBlockComboBox), new FrameworkPropertyMetadata(DataGridComboBoxColumn.TextBlockComboBoxStyleKey));
KeyboardNavigation.IsTabStopProperty.OverrideMetadata(typeof(TextBlockComboBox), new FrameworkPropertyMetadata(false));
}
}
/// <summary>
/// Style key for TextBlockComboBox
/// </summary>
public static ComponentResourceKey TextBlockComboBoxStyleKey
{
get
{
return SystemResourceKey.DataGridComboBoxColumnTextBlockComboBoxStyleKey;
}
}
从这个代码片段中,您可以看到Style
该控件的键在 中定义SystemResourceKey.DataGridComboBoxColumnTextBlockComboBoxStyleKey
。我想复制它Style
以便在我自己的代码库中进行添加和修改。但是,我似乎找不到Style
这个键所指的那个。我尝试复制控件(因为它是内部类型)并使用 Visual Studio 设计器的编辑模板功能来获取生成的副本Style/Template
,但我得到的只是默认的ComboBox
Template
. 从那里,我尝试简单地使用此默认值ComboBox
Style
并尝试对其进行修改,直到它类似于 的Style
,TextBlockComboBox
但这只会导致问题。
有人知道如何确定Style
for key中定义的内容SystemResourceKey.DataGridComboBoxColumnTextBlockComboBoxStyleKey
吗?
解决方案
以下是它PresentationFramework.Aero2.dll
在 Windows 8 及更高版本中的定义方式:
<Style x:Key="{x:Static DataGridComboBoxColumn.TextBlockComboBoxStyleKey}" TargetType="{x:Type ComboBox}">
<Setter Property="Control.Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ComboBox}">
<ContentPresenter Margin="1,1,1,1" Content="{TemplateBinding ComboBox.SelectionBoxItem}"
ContentTemplate="{TemplateBinding ComboBox.SelectionBoxItemTemplate}"
ContentTemplateSelector="{TemplateBinding ItemsControl.ItemTemplateSelector}"
ContentStringFormat="{TemplateBinding ComboBox.SelectionBoxItemStringFormat}"
VerticalAlignment="{TemplateBinding Control.VerticalContentAlignment}"
HorizontalAlignment="{TemplateBinding Control.HorizontalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding UIElement.SnapsToDevicePixels}" IsHitTestVisible="false"/>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
推荐阅读
- arduino-uno - 在 Arduino Uno 中上传草图的问题
- c - 自定义字符串比较功能说明
- javascript - EJS:从 Node.js 传递数据时隐藏 div
- javascript - 单击导航栏链接时水平滚动
- node.js - 带有变量的 tsoa @Route 装饰器在 express 应用程序中不起作用
- css - CSS - 什么是字体松鼠 webfont 生成器用于
- c# - 如何通过 Visual Studio 扩展运行当前项目
- twilio - 特维利奥 | 如何在拨打 X 时间后修改通话?
- laravel - 在 larvael 8 中运行“npm run watch”时出错
- google-cloud-platform - 将服务器迁移到 gcloud,但保留现有域的虚名服务器