我有一组三个单选按钮。根据该单选按钮被选中,我想disaply的三个控件一个 - 一个文本框,下拉列表,或按钮。如何显示基于所选择的单选按钮的结果控制?

有帮助吗?

解决方案

可以将控件绑定到RadioButton的属性器isChecked的可见性,采用BooleanToVisibilityConverter

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Page.Resources>
    <BooleanToVisibilityConverter x:Key="convVisibility"/>
  </Page.Resources>
  <Grid>
    <StackPanel Orientation="Vertical">
      <RadioButton Name="radioButton1" GroupName="group1">Control1</RadioButton>
      <RadioButton Name="radioButton2" GroupName="group1">Control2</RadioButton>
      <RadioButton Name="radioButton3" GroupName="group1">Control3</RadioButton>
      <Grid>
        <Button Visibility="{Binding IsChecked, ElementName=radioButton1, Converter={StaticResource convVisibility}}">1. Button</Button>
        <TextBlock Visibility="{Binding IsChecked, ElementName=radioButton2, Converter={StaticResource convVisibility}}">2. TextBlock</TextBlock>
        <TextBox Visibility="{Binding IsChecked, ElementName=radioButton3, Converter={StaticResource convVisibility}}">3. TextBox</TextBox>
      </Grid>
    </StackPanel>
  </Grid>
</Page>

编辑:

  

这是解决方案的伟大工程,这是很容易实现。有反正我能够防止控制被隐藏在设计模式?

我不知道其他设计师(混合为例),但在Visual Studio设计的控制是从来没有隐瞒过...

总之,你可以实现自己的转换器,它总是在设计模式返回可见。对于一些模糊的原因,BooleanToVisibilityConverter类是密封的,所以你不能从它继承。您可以委托转换为BooleanToVisibilityConverter相反,如果你不希望重写转换逻辑:

public class MyBooleanToVisibilityConverter : IValueConverter
{
    private BooleanToVisibilityConverter _converter = new BooleanToVisibilityConverter();
    private DependencyObject _dummy = new DependencyObject();

    private bool DesignMode
    {
        get
        {
            return DesignerProperties.GetIsInDesignMode(_dummy);
        }
    }

    #region IValueConverter Members

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (DesignMode)
            return Visibility.Visible;
        else
            return _converter.Convert(value, targetType, parameter, culture);
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        return _converter.ConvertBack(value, targetType, parameter, culture);
    }

    #endregion
}

其他提示

要在设计时期间保持该组件可见可以FallbackValuetrue添加到复选框为:

<RadioButton x:Name="cbxEmail" Content="Email Details" IsEnabled="{Binding IsEmail, FallbackValue=true}" IsChecked="{Binding IsEmail, Mode=OneWay, FallbackValue=true}"
                                Grid.Column="2"/>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top