13
sto cercando di ignorare i metadati di ItemsControl.ItemsSourceProperty in una classe derivata, al fine di assegnare il mio callback:metadati di override e di base dei metadati devono essere dello stesso tipo
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)
{}
}
ho un progettista + eccezione di runtime:
Metadata override and base metadata must be of the same type
Cosa sto facendo male?
Sto lavorando con 'SnapsToDevicePixesProperty'. Se decompilisco il codice, vedo che è inizialmente registrato con plain 'PropertyMetadata'. Tuttavia, se lo controllo nel debugger in fase di esecuzione, vedo due voci nel suo '_metadataMap' - un' PropertyMetadata' e un 'FrameworkPropertyMetadata'. Apparentemente la struttura aggiunge un altro proprietario da qualche parte? Ciò implica che, quando si aggiunge un proprietario, il tipo di metadati deve corrispondere o derivare dal tipo * più derivato * già registrato? – dlf
Penso che sarebbe un'ipotesi sicura. Altrimenti, la classe che ha registrato il 'FrameworkPropertyMetadata' avrebbe un'eccezione quando tentava di accedere ai suoi metadati –
Ha senso (farei di nuovo +1, ma ho già fatto un po 'di tempo fa) – dlf