Pergunta

Existe uma maneira de ter propriedades XAML escala junto com o tamanho dos UIElements a que pertencem?

Em essência, eu tenho um modelo de controle que eu criei muito grande para a sua utilização / principalmente porque eu quero usar o mesmo controle com tamanhos diferentes. O problema é que eu posso definir o tamanho do controle para Auto (no ControlTemplate), no entanto as propriedades dos elementos do modelo intrisic não são redimensionadas: restos eg StrokeThickness em 10, quando deveria se tornar 1.

Ele funciona muito bem quando eu aplicar um ScaleTransform no modelo, mas que resulta em um controle que é muito pequeno quando ele é realmente usado: a largura / altura = Auto redimensiona o controle para o tamanho adequado e depois o ScaleTransform é aplicada. Então, eu estou coisas com um tipo de controle não-escalonáveis.

Eu sou um pouco novo para WPF, então não pode ser uma maneira simples de fazer isso ...

Foi útil?

Solução

Pode-se tentar ligar a largura e a altura do controlo no interior do molde para a largura e altura, respectivamente, do controlo modelada no tempo de execução. Algo como:

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

Note-se que as fontes de ligação são o FrameworkElement.ActualWidth e FrameworkElement.ActualHeight propriedades do controle modelo. Essas propriedades contêm a largura e altura de um controle depois de ter sido processado, o que pode ser diferente do que foi especificado no Largura e Altura Propriedades. Isso ocorre porque os valores são em última análise, calculada em tempo de execução tendo em conta o tamanho de quaisquer controles pai na árvore visual.

Outras dicas

Sua descrição é um pouco vago, mas parece que você vai querer ter um ViewBox com o conjunto de estiramento para Uniform como o elemento raiz do seu controle.

Pena que você não pode criar um modelo de controle para um StackPanel, DockPanel, Grelha, ou qualquer outro recipiente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top