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>
Foi útil?

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.

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