我想根据当前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>
答案 0 :(得分:1)
您可以为CheckBox
或ToggleButton
创建样式,用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加载控件。