Tenho 20 botões de opção no meu aplicativo WPF. Quero que eles se pareçam com botões de alternância e tenham 2 estados:
- Com conteúdo "IN" e fundo verde quando não estão marcados
- Com conteúdo "OUT" e fundo vermelho quando são verificados.
Como botões de opção, apenas (até) 1 deve ser marcado por vez.
Eu tentei usar o estilo de um botão de alternância para um botão de opção, mas como criei um controle de usuário para o estilo do botão de alternância (para alterar o conteúdo e a cor de fundo), não posso usar
<RadioButton Style="{StaticResource {x:Type ToggleButton}}"/>
Alguma ideia?
Parece que você está preso em um dilema: use o ToggleButton (já estilizado como você quiser) e adicione algum tipo de comportamento do RadioButton ou remodele os RadioButtons para que pareçam ToggleButtons sem ter que lidar com a lógica do comportamento.
Ambas as maneiras, na minha opinião, são aplicáveis e ambas têm uma solução, você só precisa escolher a que melhor se adapta ao seu caso.
ToggleButtons com comportamento de RadioButtons.
Para relacionar os ToggleButtons entre si, como não temos a propriedade "GroupName" como os RadioButtons, devemos vinculá-los a uma única fonte no code-behind e controlar os estados verificados manualmente. Isso pode ser feito indexando cada ToggleButton com conversões adicionais:
XAML (adicione "index" para cada ToggleButton como ConverterParameter):
Code-behind/ViewModel (propriedade de fonte única para cada ToggleButton):
E conversor (comparando o valor do índice da propriedade de origem com o índice do ToggleButton):
RadioButtons com estilo ToggleButtons.
Isso pode ser mais simples, já que você não transforma o carro em um pássaro, apenas desenha asas nas portas do carro. Fazer os RadioButtons parecerem "controles deslizantes" comuns não é uma tarefa tão complicada:
XAML (ajuste as propriedades às suas necessidades):
Se você quiser um comportamento de alternância entre dois botões de opção, pode definir a propriedade Checked de um botão de opção como o inverso do outro. Por exemplo, em C#: