WPF绑定可见性

时间:2016-10-04 14:03:15

标签: c# wpf

我有标签在RadioButton FirstSecond IsChecked=true时可见,在ThirdFourth IsChecked=false时折叠。 是否只有一种方法可以将按钮的名称传递给转换器,并且转换器决定是折叠还是可见?

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition></RowDefinition>
        <RowDefinition></RowDefinition>
    </Grid.RowDefinitions>
    <StackPanel Orientation="Vertical">
        <RadioButton Content="Visible" x:Name="First"></RadioButton>
        <RadioButton Content="Visible" x:Name="Second"></RadioButton>
        <RadioButton Content="Collapsed" x:Name="Third"/>
        <RadioButton Content="Collapsed" x:Name="Fourth"></RadioButton>
    </StackPanel>
    <Label Content="Test" Grid.Row="1"></Label>
</Grid>

2 个答案:

答案 0 :(得分:4)

您可以实施IMultiValueConverter并使用它将Visibility绑定到多个值。 您可以找到示例here

答案 1 :(得分:0)

我建议将MVVM模式与https://en.wikipedia.org/wiki/List_of_file_signatures这样的框架一起使用。然后在View Model中,您可以拥有Label绑定到的LabelVisiblity属性。

如果MVVM模式不是一个选项,您可以为每个CheckBox的Checked事件添加事件处理程序。然后在那里设置Visility。

    public MainWindow()
    {
        InitializeComponent();

        textBlock.Visibility = Visibility.Collapsed;

        option1.Checked += Option_Checked;
        option2.Checked += Option_Checked;
        option3.Checked += Option_Checked;
        option4.Checked += Option_Checked;
    }

    private void Option_Checked(object sender, RoutedEventArgs e)
    {
        var option = (sender as RadioButton);
        if (option.Name == "option1" || option.Name == "option2")
            textBlock.Visibility = Visibility.Collapsed;
        else
            textBlock.Visibility = Visibility.Visible;

    }