Estamos criando um aplicativo XBAP no qual precisamos ter cantos arredondados em vários locais em uma única página e gostaríamos de ter um contêiner de canto arredondado WPF para colocar vários outros elementos dentro. Alguém tem algumas sugestões ou exemplos de código sobre como podemos fazer isso da melhor maneira? Com estilos em um ou com a criação de um controle personalizado?
wpf
rounded-corners
FarrEver
fonte
fonte
Respostas:
Você não precisa de um controle personalizado, apenas coloque seu contêiner em um elemento de borda:
Você pode substituir o
<Grid/>
por qualquer um dos contêineres de layout ...fonte
<Border BorderBrush="Black" BorderThickness="1" CornerRadius="8">
é um substituto adequado para isso, um pouco mais sucintoEu sei que esta não é uma resposta à pergunta inicial ... mas muitas vezes você deseja cortar o conteúdo interno da borda arredondada que acabou de criar.
Chris Cavanagh descobriu uma excelente maneira de fazer exatamente isso.
Eu tentei algumas abordagens diferentes para isso ... e acho que esta é demais.
Aqui está o xaml abaixo:
fonte
Eu só tinha que fazer isso sozinho, então pensei em postar outra resposta aqui.
Esta é outra maneira de criar uma borda de canto arredondado e cortar seu conteúdo interno . Esta é a maneira direta de usar a propriedade Clip. É bom se você quiser evitar um VisualBrush.
O xaml:
O código do conversor:
fonte
Implementação baseada em código VB.Net da solução de controle Border da kobusb. Usei-o para preencher um ListBox de controles de botão. Os controles de botão são criados a partir de extensões MEF. Cada extensão usa o atributo ExportMetaData do MEF para uma descrição da extensão. As extensões são objetos gráficos VisiFire. O usuário pressiona um botão, selecionado na lista de botões, para executar o gráfico desejado.
fonte
Se você está tentando colocar um botão em uma borda de retângulo arredondado, você deve verificar o exemplo do msdn . Eu encontrei isso pesquisando imagens do problema (em vez de texto). Seu retângulo externo volumoso é (felizmente) fácil de remover.
Observe que você terá que redefinir o comportamento do botão (já que alterou o ControlTemplate). Ou seja, você precisará definir o comportamento do botão quando clicado usando uma tag Trigger (Property = "IsPressed" Value = "true") na tag ControlTemplate.Triggers. Espero que isso economize o tempo que perdi para outra pessoa :)
fonte