我有一个依赖属性,它应该从附加属性继承它的值,但它永远不会。它似乎总是取其默认值。
我的设置
我有一个继承自Microsoft的DataGrid的自定义网格和一个继承自Microsoft的DataGridTextColumn的CustomColumn。
我的CustomGrid有一个可继承的附加属性" 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 >
在这个例子中,我希望:
我得到了什么:
似乎它正在为CustomColumn类中的属性设置默认值。
我尝试更改CustomColumn.ShowToolTip属性与CustomGrid.ShowToolTip属性的关联,但它并不重要,它从不继承CustomGrid中的值。
ShowToolTipProperty = CustomGrid.ShowToolTipProperty.AddOwner(typeof(CustomColumn ),
new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Inherits));
我需要做些什么才能使CustomColumn.ShowToolTip属性从teg CustomGrid.ShowToolTip属性继承其值?
答案 0 :(得分:3)
DataGridColumn未放置在DataGrid下的VisualTree中。 这是一种常见的误解。
如下所示:
您通过DataGrid设置并影响列的所有依赖项属性都不会继承,并且在DataGrid代码中完成。
例如:DataGrid的 CanUserResizeColumns 属性设置DataGridColumn&#39; s CanUserResize 属性。你看一下源代码,看看它是如何完成的。
您还可以看到DataGrid的列存储在Property中,而不是DataGrid的内容。