Sto cercando di associare un'immagine da una finestra a un 'Display' di UserControl all'interno di un 'DisplayHandler' di UserControl. Il display ha una proprietà di dipendenza 'DisplayImage'. Questo è simile a this, ma le loro risposte non hanno aiutato il mio problema.Come esporre una proprietà di dipendenza di un controllo nidificato in un controllo utente?
DisplayHandler dovrebbe inoltre avere la proprietà 'DisplayImage' e passare il binding a Display. Ma Visual Studio non mi consente di registrare due volte una proprietà di dipendenza con lo stesso nome. Così ho cercato di non registrarlo due volte, ma solo per riutilizzarlo:
finestra
<my:DisplayHandler DisplayImage=
"{Binding ElementName=ImageList, Path=SelectedItem.Image}" />
DisplayHandler
XAML
<my:Display x:Name="display1"/>
cs
public static readonly DependencyProperty DisplayImageProperty =
myHWindowCtrl.DisplayImageProperty.AddOwner(typeof(DisplayHandler));
public HImage DisplayImage {
get { return (HImage)GetValue(DisplayImageProperty); }
set { SetValue(DisplayImageProperty, value); }
}
public HImage DisplayImage /*alternative*/ {
get { return (HImage)display1.GetValue(Display.DisplayImageProperty); }
set { display1.SetValue(Display.DisplayImageProperty, value); }
}
** nessuno dei 2 proprietà funzionato. *
display
public HImage DisplayImage {
get { return (HImage)GetValue(DisplayImageProperty); }
set { SetValue(DisplayImageProperty, value); }
}
public static readonly DependencyProperty DisplayImageProperty =
DependencyProperty.Register("DisplayImage", typeof(HImage), typeof(Display));
ho pensato un controllo va su l'albero e cerca la sua proprietà se la propria Il valore non è definito. ->reference
Così dovrebbe lavoro in qualche modo ...
ho fatto alcuni tentativi con Templating e A ContentPresenter causa che ha lavorato per l'ImageList (ImageList contiene anche il Display), ma non sono riuscito a farlo associare il valore come per un oggetto ListBox.
Grazie! Funziona bene Ma ho appena scoperto, aggiungendo 'DisplayImage =" {Binding RelativeSource = {RelativeSource AncestorType = hview: DisplayHandler}, Path = DisplayImage} "/>' inoltre mi supporta con twoway Binding. –
Speravo solo che fosse _same_ DP e quindi ChangeNotification avrebbe funzionato. In questo modo, sembra che memorizzi nuovamente il valore due volte. Ho sbagliato? –
In realtà è lo stesso DP, ma memorizza il valore due volte. Per prima cosa memorizza il valore su DisplayHandler e poi (nel PropertyCangedCallback) sull'istanza di visualizzazione incorporata. Ma qual è il problema? Sta semplicemente memorizzando un riferimento a un oggetto. O HImage è una struttura di grandi dimensioni? – Clemens