Pergunta

Eu preciso implementar um Canvas que dimensiona o seu conteúdo de acordo com o seu tamanho. Eu sei que há Viewbox, que dimensiona tudo dentro dele. No entanto eu não posso usar isso, porque alguns elementos têm um tamanho fixo e não pode ser escalado.

Também como pode ligar-se o tamanho do Canvas para o elemento pai (por exemplo uma janela redimensionável). Há SizeToContent para janelas, eu quero o tamanho encaixe exatamente o contrário. Além disso, a tela usa algum desenho com base no tamanho do elemento de hospedagem, como é redesenho desencadeada e como posso garantir que ele só chama se ele fica um tamanho válido (ou minutos)?

Foi útil?

Solução

Se você não especificar qualquer largura ou altura para a tela que usa automaticamente todo o espaço disponível. Isso ocorre porque o VerticalAlignment padrão e HorizontalAlignment estão definidas para Stretch.

O que você quer dizer com tela que balança o seu conteúdo de acordo com tamanho, de sem escala todo o conteúdo como alguns têm tamanho fixo?

Update após comentários

Se o seu algoritmo de desenho já dimensiona o conteúdo para a tela altura e largura, em seguida, tudo que você precisa fazer é redimensionar a tela para caber na área que acredito? Nesse caso, basta remover a altura / largura valores codificados e a tela será redimensionada para caber no recipiente.

Você pode precisar usar ActualHeight / ActualWidth em vez de altura / largura no algoritmo de desenho após este embora. ActualHeight / ActualWidth devolver os valores que o contêiner de layout dará sua tela assim que estes representam os valores da tela é desenhada com.

Outras dicas

Eu acho que você pode encontrar as respostas a todas suas perguntas na minha London Underground demonstração .

Estou fazendo isso a partir da memória, mas se bem me lembro uma janela usa o um painel ou uma tela como parte dela de ControlTemplate (no qual reside o ContentPresenter), o que significa que uma lona colocados diretamente em uma janela terá questões redimensionando automaticamente como se pode em outros lugares. Existem algumas maneiras básicas para lidar com isso.

1 Escrever um novo ControlTemplate para a sua janela para o uso. :(
2 Coloque o conteúdo diretamente na janela, em vez de uma tela dentro da janela:. / Tablet 3 Faça um by-name vinculativo. :)

<MyWindow x:Name="topWindow">
    <Canvas x:Name="topCanvas" Width="{Binding ElementName=topWindow, Path=ActualWidth}" Height="{Binding ElementName=topWindow, Path=ActualHeight}">
        ...Content...
    </Canvas>
</MyWindow>

(Quando isso acontece, eu grades muitas vezes ligam dentro Telas desta forma, para que eu possa itens facilmente animados movendo-se de uma posição de grade para outro.)

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