Domanda

Ok, quindi questa è solo un'idea che ho fluttuante nella mia testa per quanto riguarda una sorta di proprietà di dipendenza "pseudo-write-solo". dico una specie di Perché in realtà non voglio nemmeno che il valore venga memorizzato, ma piuttosto voglio che il valore che passo al setter imposti Altro proprietà. Come ipotetico esempio, mi piacerebbe farlo ...

<button UIHelper.Bounds="10,10,40,20" />

Invece di questo...

<button Canvas.Left="10" Canvas.Top="10" Width="40" Height="20" />

Solo una cosa di convenienza di XAML che mi consente di impostare le quattro proprietà effettive con qualcosa di più facile da digitare grazie a dire una proprietà allegata da solo scrittura. Pensa lungo il percorso delle regole CSS crollate. In realtà, in tal senso, ecco un altro ...

<border UIHelper.BrushSpec="AliceBlue Red 2 4" />

invece di...

<border Background="AliceBlue" BorderBrush="Red" BorderThickness="2" CornerRadius="4" />

Ora usando il primo come esempio, un'idea è quella di archiviare una tale struttura internamente, quindi sincronizzarla con la larghezza, l'altezza, la canvas. Quindi non è necessario. (Tecnicamente potrei ignorarlo del tutto e chiamare ClearValue nel gestore di proprietà, ma di nuovo, non è proprio per leggerlo indietro, quindi è solo per coerenza.)

Tecnicamente non voglio nemmeno/ho bisogno che questo sia un DP tranne la mia comprensione è se devi impostarlo da XAML, deve essere un DP, quindi quello che sto cercando. Sarebbe perfetto se potessimo semplicemente impostare una proprietà .NET direttamente in quanto potrei stabilire l'implementazione sia e ricostruirsi se necessario, ma ancora una volta, capisco che non puoi accedere alle proprietà .NET da XAML, quindi io ' Sono proprio qui.

Ora sì, so che questo concetto sarà disapprovato da molte persone, specialmente dai puristi XAML, ma lo chiedo come non perché Quindi, se per nessun altro motivo, considera questo un esercizio in "non si può fare" non "dovrebbe essere fatto". Non sto nemmeno suggerendo che questo sia quello che userò. Sto solo cercando di capire meglio i limiti di DPS e XAML e trovo esercizi come questo davvero utile.

Allora, pensieri ??

M

Nessuna soluzione corretta

Altri suggerimenti

Senza andare all'estremo di scrivere il tuo compilatore XAML, penso che il meglio che puoi fare sia una proprietà allegata che imposta il gruppo di proprietà a cui sei interessato in base a una sintassi compatta che definisci. Sì, questo significa che hai assegnato l'archiviazione per la rappresentazione compatta, ma come dici che potresti immediatamente cancellarlo dopo aver applicato. Sarebbe un po 'non ortodosso, ma tecnicamente funzionerebbe.

Potresti anche provare a non dichiarare affatto un campo di proprietà allegato in modo che il valore si accede tramite i metodi Get/Set (non ci ha provato, ma credo che funzioni quando il DP è privato, quindi forse questo funzionerà). In questo modo, potresti effettivamente averlo leggibile senza andare al problema di ascoltare le modifiche alle proprietà pertinenti. Certo, significa che la tua proprietà non avrà una notifica di modifica:

public static string GetBounds(UIElement uiElement)
{
    return Canvas.GetLeft(uiElement) + "," + ...;
}

public static void SetBounds(UIElement uiElement, string compact)
{
    // parse and apply compact
}

Sto solo mettendo la rappresentazione compatta in a string Sopra, ma probabilmente vorresti usare un tipo specifico. Ancora una volta, quanto sopra potrebbe non funzionare: potrebbe essere necessario il associato DependencyProperty esempio. Se fossi su una macchina Windows, lo proverei.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top