13
私は自分のコールバック割り当てるために、派生クラスでItemsControl.ItemsSourcePropertyのメタデータを上書きしようとしている:私はデザイナーを取得メタデータのオーバーライドやベースのメタデータは、同じタイプでなければなりません
public class CustomDataGrid : System.Windows.Controls.DataGrid
{
static CustomDataGrid()
{
CustomDataGrid.ItemsSourceProperty.OverrideMetadata(typeof(CustomDataGrid), new UIPropertyMetadata(new PropertyChangedCallback(OnItemsSourcePropertyChanged)));
}
private static void OnItemsSourcePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{}
}
を+ランタイム例外:
Metadata override and base metadata must be of the same type
私は間違っていますか?
私は 'SnapsToDevicePixesProperty'を使っています。コードを逆コンパイルすると、最初は普通の 'PropertyMetadata'で登録されています。しかし、実行時にデバッガでそれを調べると、 '_metadataMap'には2つのエントリがあります。これは' PropertyMetadata'と 'FrameworkPropertyMetadata'です。どうやら、フレームワークはどこか別の所有者を追加しますか?これは、プロパティ所有者を追加するときに、メタデータタイプが既に登録されている*派生タイプ*と一致するか、またはそれから派生しなければならないという規則を暗示していますか? – dlf
私はこれが安全な前提だと思います。それ以外の場合は、 'FrameworkPropertyMetadata'を登録したクラスは、そのメタデータにアクセスしようとすると例外が発生します。 –
意味があります(もう一度+1しますが、 – dlf