Domanda

Esiste un modo per ridimensionare le proprietà XAML in base alla dimensione degli elementi a cui appartengono?

In sostanza, ho un modello di controllo che ho creato troppo grande per il suo uso / principalmente perché voglio usare lo stesso controllo con dimensioni diverse. Il problema è che posso impostare la dimensione del controllo su Auto (in ControlTemplate), tuttavia le proprietà degli elementi del modello intrisic non vengono ridimensionate: ad esempio StrokeThickness rimane a 10 mentre dovrebbe diventare 1.

Funziona benissimo quando applico un ScaleTransform sul modello, ma questo si traduce in un controllo che è troppo piccolo quando viene effettivamente utilizzato: larghezza / altezza = Auto ridimensiona il controllo alla dimensione corretta e quindi viene applicata la scaletransform. Quindi sono roba con una sorta di controllo non scalabile.

Sono un po 'nuovo in WPF, quindi potrebbe esserci un modo semplice per farlo ...

È stato utile?

Soluzione

È possibile provare a associare la larghezza e l'altezza del controllo all'interno del modello alla larghezza e altezza rispettivamente del controllo basato sul modello in fase di esecuzione. Qualcosa del tipo:

<Button>
    <Button.Template>
        <ControlTemplate TargetType={x:Type Button}>
            <Border Width="{TemplateBinding Property=ActualWidth}"
                    Height="{TemplateBinding Property=ActualHeight}">
                <ContentPresenter />
             </Border>
         </ControlTemplate>
    </Button.Template>
</Button>

Tieni presente che le fonti di associazione sono le proprietà FrameworkElement.ActualWidth e FrameworkElement.ActualHeight del controllo basato su modelli. Queste proprietà contengono la larghezza e l'altezza di un controllo dopo che è stato eseguito il rendering, che può essere diverso da quello che è stato specificato nelle proprietà Larghezza e Altezza . Questo perché alla fine i valori vengono calcolati in fase di runtime tenendo conto della dimensione di tutti i controlli padre nella struttura ad albero visivo.

Altri suggerimenti

La tua descrizione è un po 'vaga, ma sembra che tu voglia avere un ViewBox con Stretch impostato su Uniform come elemento radice del tuo controllo.

Peccato che non puoi creare un modello di controllo per StackPanel, DockPanel, Grid o qualsiasi altro contenitore.

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