基于Control CheckState的Silverlight更改内容(切换多个ContentPresenters)

时间:2012-03-07 19:22:34

标签: silverlight xaml controltemplate contentpresenter visualstates

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

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

示例:“ToggleContent”控件,当选中状态为Unchecked时显示UserControl1,当Check状态为Checked时显示UserControl2。

XAML可能看起来像这样:

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

3 个答案:

答案 0 :(得分:1)

您可以为CheckBoxToggleButton创建样式,用UserControls替换样式中的ContentPresenter,并在CheckStates中更改它们的可见性。

答案 1 :(得分: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();
    }
}

这是一个很好的post from Jeff Wilcox值转换器

答案 2 :(得分:0)

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