我正在尝试复制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 Designer的“编辑模板”功能来获取Style/Template
的生成的副本,但是我得到的只是默认的ComboBox
Template
。从那里开始,我尝试仅使用此默认值ComboBox
Style
并尝试对其进行修改,直到它类似于Style
的TextBlockComboBox
,但这只是引起问题。
有人知道如何确定键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>