我有一个依赖属性,它应该从附加属性继承其值,但它从来没有这样做。它似乎总是采用默认值。
我的设置
我有一个继承自 Microsoft 的 DataGrid 的自定义网格和一个继承自 Microsoft 的 DataGridTextColumn 的 CustomColumn。
我的 CustomGrid 有一个可继承的附加属性“ShowToolTip”,带有 Inherits 标志,我的 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);
}
}
}
自定义列属性:
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中使用(仅绑定(bind)相关属性)
<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(值2):不应显示工具提示
- Column3(Value3):不应显示工具提示
我得到了什么:
- Column1(值 1):显示工具提示
- Column2(值2):不显示工具提示
- 第 3 列(值 3):显示工具提示
它似乎采用了为 CustomColumn 类中的属性设置的默认值。
我尝试更改 CustomColumn.ShowToolTip 属性与 CustomGrid.ShowToolTip 属性的关联,但无论我做什么,它都不会继承 CustomGrid 的值。
ShowToolTipProperty = CustomGrid.ShowToolTipProperty.AddOwner(typeof(CustomColumn ),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Inherits));
我需要做什么才能使我的 CustomColumn.ShowToolTip 属性从 CustomGrid.ShowToolTip 属性继承其值?
最佳答案
DataGridColumn 未放置在 DataGrid 下的 VisualTree 中。 这是一个常见的误解。
如下所示:
您通过 DataGrid 设置并影响列的所有依赖属性都不会被继承,而是在 DataGrid 的代码中完成。
例如:DataGrid 的 CanUserResizeColumns 属性设置 DataGridColumn CanUserResize 属性。您是否查看了源代码以了解其如何完成的示例。
您还可以看到 DataGrid 的列存储在属性中,而不是作为 DataGrid 的内容。
关于c# - 子级不继承依赖属性值并采用默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30062112/