Pregunta

¿Hay alguna manera de que las propiedades de XAML se amplíen junto con el tamaño de los elementos a los que pertenecen?

En esencia, tengo una plantilla de control que he creado demasiado grande para su uso / principalmente porque quiero usar el mismo control con diferentes tamaños. El problema es que puedo configurar el tamaño del control en Auto (en la plantilla ControlTemplate), sin embargo, las propiedades de los elementos de la plantilla intrínseca no se redimensionan: por ejemplo, StrokeThickness permanece en 10 mientras que debería ser 1.

Funciona bien cuando aplico un ScaleTransform en la plantilla, pero eso resulta en un control que es muy pequeño cuando se usa en realidad: el ancho / alto = Automático cambia el tamaño del control al tamaño adecuado y luego se aplica la transformación de escala. Así que soy un tipo de control no escalable.

Soy un poco nuevo en WPF, por lo que podría haber una forma sencilla de hacer esto ...

¿Fue útil?

Solución

Podría intentar vincular el ancho y la altura del control dentro de la plantilla con el ancho y la altura respectivamente del control con plantilla en tiempo de ejecución. Algo así como:

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

Tenga en cuenta que las fuentes de enlace son las propiedades FrameworkElement.ActualWidth y FrameworkElement.ActualHeight del control de plantilla. Estas propiedades contienen el ancho y el alto de un control después de que se haya procesado, que puede ser diferente de lo que se ha especificado en las propiedades Ancho y Altura . Esto se debe a que los valores se calculan finalmente en tiempo de ejecución teniendo en cuenta el tamaño de los controles principales en el árbol visual.

Otros consejos

Su descripción es un poco vaga, pero parece que querrá tener un ViewBox con el Estiramiento establecido en Uniforme como el elemento raíz de su control.

Lástima que no pueda crear una plantilla de control para un StackPanel, DockPanel, Grid o cualquier otro contenedor.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top