我有一个依赖属性,它应该从附加属性继承它的值,但它永远不会 . 它似乎总是取其默认值 .
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 回答
DataGridColumn未放在DataGrid下的VisualTree中 . 这是一种常见的误解 .
如下图所示:
通过DataGrid设置并影响列的所有依赖项属性都不会继承,并且在DataGrid的代码中完成 .
例如:DataGrid的 CanUserResizeColumns 属性,用于设置DataGridColumn的 CanUserResize 属性 . 你看一下源代码,看看它是如何完成的 .
您还可以看到DataGrid的列存储在Property中,而不是DataGrid的内容 .