我目前正在使用此解决方法在数据网格列上设置visibility属性:
这是在xaml.cs
中DataGrid.DataContextProperty.OverrideMetadata(typeof(DataGrid),
new FrameworkPropertyMetadata (null,
FrameworkPropertyMetadataOptions.Inherits,
new PropertyChangedCallback(OnDataContextChanged)));
但是我需要检查以确保它尚未更改,否则会引发异常。我尝试过的一个例子如下。
if (DataGrid.DataContextProperty.GetMetadata(typeof(DataGrid)) ==
DataGrid.DataContextProperty.DefaultMetadata) // didn't work
非常感谢任何帮助。
答案 0 :(得分:0)
我会说覆盖现有类型的属性元数据(一个未由代码声明但属于WPF框架的类)是非法的。
调用DataContextProperty.OverrideMetadata(typeof(DataGrid), ...)
只是偶然的,因为类DataGrid尚未覆盖FrameworkElement.DataContext
属性的元数据。但你不能对此作出任何假设,MS可能会决定在未来的WPF版本中对此进行更改。
您必须在静态类构造函数中创建派生类并覆盖元数据,如OverrideMetadata的MSDN文档中所示:
class MyDataGrid : DataGrid
{
static MyDataGrid()
{
DataGrid.DataContextProperty.OverrideMetadata(typeof(MyDataGrid),
new FrameworkPropertyMetadata(null,
FrameworkPropertyMetadataOptions.Inherits,
new PropertyChangedCallback(OnDataContextChanged)));
}
}