In base alla pagina x: Reference Markup Extension su MSDN, x:Reference
Fa riferimento a un’istanza che è stata dichiarata altrove nel markup XAML. Il riferimento si riferisce a x di un elemento: Nome.
In base alla pagina Proprietà Binding.ElementName su MSDN, ElementName
Il valore della proprietà Name o x: Name Directive dell’elemento di interesse.
Guardando indietro alla sezione commenti sulla prima pagina:
x: riferimento e WPF
In WPF e XAML 2006, i riferimenti agli elementi sono indirizzati dalla funzionalità a livello di framework del collegamento ElementName. Per la maggior parte delle applicazioni e degli scenari WPF, è comunque necessario utilizzare il collegamento ElementName. Eccezioni a questa guida generale potrebbero includere casi in cui esistono dati contestuali o altre considerazioni sull’ambito dell’ambito che rendono impraticabile l’associazione dei dati e in cui la compilazione del markup non è coinvolta.
Per completezza, qui fa parte della sezione commenti sulla pagina ElementName
:
Questa proprietà è utile quando si desidera associare la proprietà di un altro elemento nell’applicazione. Ad esempio, se si desidera utilizzare un dispositivo di scorrimento per controllare l’altezza di un altro controllo nell’applicazione o se si desidera associare il contenuto del controllo alla proprietà SelectedValue del controllo ListBox.
Ora, mentre sono pienamente consapevole di quando e come utilizzare la proprietà ElementName
, non comprendo appieno la differenza tra questo e l’estensione x:Reference
markup. Qualcuno può spiegare questo e in particolare, espandere l’ultima frase mostrata nella sezione x:Reference
?:
Eccezioni a questa guida generale potrebbero includere casi in cui esistono dati contestuali o altre considerazioni sull’ambito dell’ambito che rendono impraticabile l’associazione dei dati e in cui la compilazione del markup non è coinvolta.
Fondamentalmente, come hai detto tu, quei due fanno quasi la stessa cosa. Tuttavia ci sono piccole differenze nel cofano.
{x:Reference ...}
-> restituisce solo un riferimento di un object che non crea quel “ponte” tra due proprietà come il legame farebbe. Dietro a tutto ciò viene utilizzato un servizio che cerca il nome specificato in un ambito specifico che di solito è la finestra stessa.
{Binding ElementName="..." }
-> prima di tutto crea quell’object vincolante, quindi cerca il nome dell’object ma non usando la stessa tecnica sotto il cofano come x: Reference. L’algoritmo di ricerca si sposta verso l’alto e / o verso il basso in VisualTree per trovare l’elemento desiderato. Pertanto è sempre necessario un VisualTree funzionale. Ad esempio se usato all’interno di un non-UiElement, non funzionerà. Alla fine il legame rimane e fa il suo pane quotidiano.
Questo non funzionerà:
....
Questo funziona:
....
Un po ‘come quello 🙂
ElementName è specifico per piattaforma. Vale a dire potrebbe essere o non essere presente in base alla piattaforma che stai utilizzando. x: Reference eleva tale concetto a una funzione nativa XAML. Pertanto qualsiasi piattaforma che supporti XAML supporta x: Reference.