首页 文章

Child不继承依赖项属性值并采用默认值

提问于
浏览
2

我有一个依赖属性,它应该从附加属性继承它的值,但它永远不会 . 它似乎总是取其默认值 .

My Setup

我有一个自定义网格,它继承自Microsoft的DataGrid和一个继承自Microsoft的DataGridTextColumn的CustomColumn .

我的CustomGrid有一个可继承的附加属性"ShowToolTip",带有 Inherits 标志,我的CustomColumn有一个"ShowToolTip"依赖属性 .

CustomColumn“ShowToolTip”永远不会将我设置的值设置为CustomGrid中的ShowToolTip .

CustomGrid Attached Property:

public class CustomGrid: DataGrid
{
        static CustomGrid()
        {
             ShowToolTipProperty = DependencyProperty.RegisterAttached("ShowToolTip", typeof(bool), typeof(CustomGrid), 
                new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.Inherits));

        }

        public static bool GetShowToolTip(DependencyObject target)
        {
            return (bool)target.GetValue(ShowToolTipProperty);
        }

        public static void SetShowToolTip(DependencyObject target, bool value)
        {
            target.SetValue(ShowToolTipProperty, value);
        }

        public bool ShowToolTip
        {
            get
            {
                return GetShowToolTip(this);
            }
            set
            {
                SetShowToolTip(this, value);
            }
        }
}

CustomColumn Property:

public class CustomColumn : DataGridTextColumn
{
        static CustomColumn ()
        {
              ShowToolTipProperty = CustomGrid.ShowToolTipProperty.AddOwner(typeof(CustomColumn ), 
            new FrameworkPropertyMetadata(true, FrameworkPropertyMetadataOptions.Inherits));
        }

        public bool ShowToolTip
        {
           get { return (bool)GetValue(ShowToolTipProperty); }
           set { SetValue(ShowToolTipProperty, value); }
        }
}

Use in Xaml (只是绑定相关属性)

<myNamespace:CustomGrid Name="myGrid"  ShowToolTip="False">
    <DataGrid.Columns>
        <myNamespace:CustomColumn Binding="{Binding Value1}" ShowToolTip="True"/>
        <myNamespace:CustomColumn Binding="{Binding Value2}" ShowToolTip="False"/>
        <myNamespace:CustomColumn Binding="{Binding Value3}" /> 
    </DataGrid.Columns>
</myNamespace:CustomGrid >

在这个例子中我期望:

  • Column1(Value1):应显示工具提示

  • Column2(Value2):不应显示工具提示

  • Column3(Value3):不应显示工具提示

我得到了什么:

  • Column1(Value1):显示工具提示

  • Column2(Value2):不显示工具提示

  • Column3(Value3): SHOWS 工具提示

它似乎正在为CustomColumn类中的属性设置默认值 .

我尝试更改CustomColumn.ShowToolTip属性与CustomGrid.ShowToolTip属性的关联,但它无关紧要,它永远不会从CustomGrid继承值 .

ShowToolTipProperty = CustomGrid.ShowToolTipProperty.AddOwner(typeof(CustomColumn ), 
                new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Inherits));

我需要做什么才能使我的CustomColumn.ShowToolTip属性从Tee CustomGrid.ShowToolTip属性继承其值?

1 回答

  • 3

    DataGridColumn未放在DataGrid下的VisualTree中 . 这是一种常见的误解 .

    如下图所示:

    enter image description here

    通过DataGrid设置并影响列的所有依赖项属性都不会继承,并且在DataGrid的代码中完成 .

    例如:DataGrid的 CanUserResizeColumns 属性,用于设置DataGridColumn的 CanUserResize 属性 . 你看一下源代码,看看它是如何完成的 .

    您还可以看到DataGrid的列存储在Property中,而不是DataGrid的内容 .

相关问题