【问题标题】:Child doesn't inherit dependency property value and takes default valueChild 不继承依赖属性值并采用默认值
【发布时间】:2015-05-05 19:56:51
【问题描述】:

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

我的设置

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

我的 CustomGrid 有一个带有 Inherits 标志的可继承附加属性“ShowToolTip”,而我的 CustomColumn 有一个“ShowToolTip”依赖属性。

CustomColumn“ShowToolTip”从不采用我的 CustomGrid 中设置为 ShowToolTip 的值。

CustomGrid 附加属性:

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 属性:

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); }
        }
}

在 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 属性从 CustomGrid.ShowToolTip 属性继承其值?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    DataGridColumn 没有放在 DataGrid 下的 VisualTree 中。 这是一个常见的误解。

    如图所示:

    您通过 DataGrid 设置并影响列的所有 Dependency 属性都不会被继承,而是在 DataGrid 的代码中完成。

    例如:DataGrid 的 CanUserResizeColumns 属性设置 DataGridColumn 的 CanUserResize 属性。您是否查看了源代码以了解它是如何完成的。

    您还可以看到 DataGrid 的列存储在属性中,而不是作为 DataGrid 的内容。

    【讨论】:

      猜你喜欢
      • 2018-06-07
      • 2013-01-05
      • 2011-08-04
      • 1970-01-01
      • 2011-08-19
      • 1970-01-01
      • 2011-12-01
      • 1970-01-01
      相关资源
      最近更新 更多