SystemResourceKey引用的WPF视图样式

问题描述 投票:1回答:1

我正在尝试复制Style DataGridComboBoxColumn'sTextBlockComboBox。当未编辑列的单元格时,这是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并尝试对其进行修改,直到它类似于StyleTextBlockComboBox,但这只是引起问题。

有人知道如何确定键StyleSystemResourceKey.DataGridComboBoxColumnTextBlockComboBoxStyleKey中定义的内容吗?

c# .net wpf datagrid wpf-controls
1个回答
1
投票

这是在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>
© www.soinside.com 2019 - 2024. All rights reserved.