Silverlight altera conteúdo com base no controle CheckState (alternar vários ContentPresenters)
-
09-12-2019 - |
Pergunta
Gostaria de alterar o conteúdo de um controle com base em seu CheckState atual (marcado, desmarcado, indeterminado).Se possível, gostaria que a solução usasse apenas XAML e não exigisse nenhum código por trás.
Estou me perguntando qual controle usar e como definir os vários conjuntos de conteúdo.
Exemplo:Um controle "ToggleContent" que exibe UserControl1 quando o estado verificado é Unchecked e UserControl2 quando o estado verificado é Checked.
O XAML pode ser parecido com isto:
<ToggleContent>
<ToggleContent.ContentUnchecked>
<local:UserControl1></local:UserControl1>
</ToggleContent.ContentUnchecked>
<ToggleContent.ContentChecked>
<local:UserControl2></local:UserControl2>
</ToggleContent.ContentChecked>
</ToggleContent>
Solução
Não tenho certeza do que significa "sem código por trás", mas parece um exemplo perfeito para usar um ValueConverter e alterar a visibilidade com base no estado de verificação.Seria algo assim:
<StackPanel>
<CheckBox x:Name="MyCheckBox"/>
<local:UserControl1 Visibility="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVis}, ConverterParameter=False">
<local:UserControl2 Visibility="{Binding IsChecked, ElementName=MyCheckBox, Converter={StaticResource BoolToVis}, ConverterParameter=True">
O Conversor:
public class BooleanToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) return Visibility.Collapsed;
bool comparer = true;
if(parameter != null)
{
comparer = System.Convert.ToBoolean(parameter);
}
return System.Convert.ToBoolean(value) == comparer ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Aqui está um bom postagem de Jeff Wilcox em conversores de valor
Outras dicas
Você pode criar um estilo para CheckBox
ou ToggleButton
, substitua o ContentPresenter
dentro do estilo pelos seus UserControls e altere sua visibilidade no CheckStates.
id crie um controle de usuário com base na caixa de seleção e use o visualstatemanager para carregar seus controles.