我目前正在使用此方法在数据网格列上设置可见性属性:
这是在 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
任何帮助将不胜感激。
说的是,重写现有类型(代码未声明的类,而是 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)));
}
}