Question

Existe-t-il un moyen de redimensionner les propriétés XAML avec la taille des éléments auxquels elles appartiennent?

En gros, j'ai un modèle de contrôle que j'ai créé trop volumineux pour son utilisation / principalement parce que je veux utiliser le même contrôle avec des tailles différentes. Le problème est que je peux définir la taille du contrôle sur Auto (dans le ControlTemplate), mais les propriétés des éléments de modèle intrisic ne sont pas redimensionnées: par exemple, StrokeThickness reste à 10 alors qu'il devrait devenir 1.

Cela fonctionne bien lorsque j'applique un ScaleTransform sur le modèle, mais cela donne un contrôle trop petit lorsqu'il est réellement utilisé: la largeur / hauteur = Auto redimensionne le contrôle à la taille appropriée , puis la transformation scalet est appliquée. Donc, je suis truc avec une sorte de contrôle non mesurable.

Je suis un peu nouveau sur WPF, il pourrait donc y avoir un moyen simple de le faire ...

Était-ce utile?

La solution

Vous pouvez essayer de lier la largeur et la hauteur du contrôle à l'intérieur du modèle à la largeur et à la hauteur respectivement du contrôle basé sur un modèle au moment de l'exécution. Quelque chose comme:

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

Notez que les sources de liaison sont les propriétés FrameworkElement.ActualWidth et FrameworkElement.ActualHeight du contrôle basé sur un modèle. Ces propriétés contiennent la largeur et la hauteur d'un contrôle après son rendu, ce qui peut être différent de ce qui a été spécifié dans les propriétés Largeur et Hauteur . En effet, les valeurs sont finalement calculées au moment de l’exécution en tenant compte de la taille des contrôles parent de l’arbre visuel.

Autres conseils

Votre description est un peu vague, mais il semblerait que vous souhaitiez un ViewBox avec le paramètre Stretch défini sur Uniform comme élément racine de votre contrôle.

Dommage que vous ne puissiez pas créer de modèle de contrôle pour un conteneur StackPanel, DockPanel, Grid ou tout autre conteneur.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top