SystemResourceKey 引用的 WPF 视图样式
WPF View Styles Referenced By SystemResourceKey
我正在尝试复制 DataGridComboBoxColumn's
TextBlockComboBox
的 Style
。这是 DataGridComboBoxColumn
在未编辑列的单元格时使用的控件。通过查看 referencesource.microsoft.com 的源代码,我能够找到有关此控件的信息(我会尝试 link 直接访问有问题的类型,但我工作笔记本电脑上的浏览器有一个安全插件,可以破坏 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 Designer 的编辑模板功能来获取 Style/Template
的生成副本,但我得到的只是默认值 ComboBox
Template
。从那里开始,我尝试简单地使用此默认值 ComboBox
Style
并尝试修改它,直到它类似于 TextBlockComboBox
的 Style
,但这只会导致问题。
有谁知道如何确定 Style
中为键 SystemResourceKey.DataGridComboBoxColumnTextBlockComboBoxStyleKey
定义的内容?
在 Windows 8 及更高版本的 PresentationFramework.Aero2.dll
中是这样定义的:
<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>
我正在尝试复制 DataGridComboBoxColumn's
TextBlockComboBox
的 Style
。这是 DataGridComboBoxColumn
在未编辑列的单元格时使用的控件。通过查看 referencesource.microsoft.com 的源代码,我能够找到有关此控件的信息(我会尝试 link 直接访问有问题的类型,但我工作笔记本电脑上的浏览器有一个安全插件,可以破坏 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 Designer 的编辑模板功能来获取 Style/Template
的生成副本,但我得到的只是默认值 ComboBox
Template
。从那里开始,我尝试简单地使用此默认值 ComboBox
Style
并尝试修改它,直到它类似于 TextBlockComboBox
的 Style
,但这只会导致问题。
有谁知道如何确定 Style
中为键 SystemResourceKey.DataGridComboBoxColumnTextBlockComboBoxStyleKey
定义的内容?
在 Windows 8 及更高版本的 PresentationFramework.Aero2.dll
中是这样定义的:
<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>