我遇到了一些奇怪的行爲,同時試圖對wpf的DataGrid控件進行子類化。DependencyProperty的默認值和子類DataGrid的中斷屬性
比方說,我有:
class CustomDataGrid<T> : DataGrid { ... }
class FooDataGrid : CustomDataGrid<Foo> { }
和一些XAML:
<local:FooDataGrid ItemsSource="..." SelectionMode="Single" SelectionUnit="FullRow" />
一切正常,我只能一次選擇一行。如果然而,我試圖通過這樣來改變的SelectionMode/SelectionUnit默認值:
static CustomDataGrid()
{
DataGrid.SelectionModeProperty.OverrideMetadata(typeof(CustomDataGrid<T>), new FrameworkPropertyMetadata(DataGridSelectionMode.Single));
DataGrid.SelectionUnitProperty.OverrideMetadata(typeof(CustomDataGrid<T>), new FrameworkPropertyMetadata(DataGridSelectionUnit.FullRow));
}
並更改XAML到:
<local:FooDataGrid ItemsSource="..." />
它似乎並不關心我違約,我可以選擇多行。現在,奇怪的是,如果我嘗試再次在xaml中手動設置屬性(雖然仍然在靜態構造函數中有默認值),我仍然可以選擇多行。所以不知怎麼用這些依賴屬性的工作覆蓋元數據的螺絲,導致wpf不關心在xaml中設置的值。
有沒有人有線索這裏發生了什麼?
啊,這很完美!是的,我可能應該有一個風格的默認值,而不是好點。非常感謝! – Chris