0

我想根据当前的 CheckState(选中、未选中、不确定)更改控件的内容。如果可能的话,我希望解决方案只使用 XAML 并且不需要任何代码。

我想知道使用哪个控件以及如何定义多组内容。

Example: A "ToggleContent" control that displays UserControl1 when the checked state is Unchecked and UserControl2 when the checked state is Checked.

XAML 可能看起来像这样:

        <ToggleContent>
            <ToggleContent.ContentUnchecked>
                <local:UserControl1></local:UserControl1>
            </ToggleContent.ContentUnchecked>
            <ToggleContent.ContentChecked>
                <local:UserControl2></local:UserControl2>
            </ToggleContent.ContentChecked>
        </ToggleContent>
4

3 回答 3

1

您可以创建一个样式到CheckBoxor ToggleButton,用您的 UserControls 替换ContentPresenter样式内部,并在 CheckStates 中更改它们的可见性。

于 2012-03-08T14:48:41.957 回答
1

我不确定“没有代码背后”是什么意思,但这听起来像是使用 ValueConverter 并根据检查状态更改可见性的完美示例。它看起来像这样:

<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">

转换器:

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();
    }
}

这是Jeff Wilcox关于价值转换器的一篇好文章

于 2012-03-09T19:03:32.767 回答
0

id 基于复选框创建用户控件并使用 visualstatemanager 加载您的控件。

于 2012-03-07T20:20:46.250 回答