C# WPF切换面板可见性

C# WPF切换面板可见性,c#,wpf,xaml,panel,visibility,C#,Wpf,Xaml,Panel,Visibility,我有两个面板,同时只能看到一个。我通过点击按钮在它们之间切换,每个面板上一个按钮 在xaml中有没有一种不用codebehind或viewmodel就可以做到这一点的好方法?我不这么认为。您需要使用viewmodel或codebehind。使用带有DataTrigger的样式,并将可见性属性的值绑定到viewmodel中的属性,避免使用codebehind。如果使用ToggleButtons,则可以将面板1的可见性绑定到按钮2的IsChecked状态,将面板2的可见性绑定到按钮1的IsCheck

我有两个面板,同时只能看到一个。我通过点击按钮在它们之间切换,每个面板上一个按钮


在xaml中有没有一种不用codebehind或viewmodel就可以做到这一点的好方法?

我不这么认为。您需要使用viewmodel或codebehind。使用带有DataTrigger的样式,并将可见性属性的值绑定到viewmodel中的属性,避免使用codebehind。

如果使用ToggleButtons,则可以将面板1的可见性绑定到按钮2的IsChecked状态,将面板2的可见性绑定到按钮1的IsChecked状态。使它们成为双向绑定,并使用内置的BooleanToVisibility转换器。

这实际上是可能的,但相当棘手

我的例子没有任何代码,实际上也没有任何值转换器

代码如下:(现在是简化版,感谢@H.B.的创意)



使用
切换按钮
的想法是从

中偷来的,只需使用一个小按钮就可以了。当然,它不是普通的旧XAML,但它不在代码背后,可以重用

我看到类似于将X可见性绑定到Y可见性并向其添加转换器的内容:

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
  return (Visibility)value == Visibility.Visible ? Visibility.Collapsed : Visibility.Visible;
}

为什么不使用TabControl呢?

使用TabControl的建议很好。我发现了一些代码,这些代码将TabControl的样式设置为只显示TabItem内容

<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>
    <TabControl BorderThickness="0" Padding="0">
      <TabControl.Resources>
        <Style TargetType="TabItem">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="TabItem">
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </TabControl.Resources>
      <TabItem Header="Not shown">
        <Grid Background="Red"/>
      </TabItem>
      <TabItem>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Tab 2

        </TextBlock>
      </TabItem>
    </TabControl>
  </Grid>
</P

表2

面板X上的按钮应该使面板X不可见,对吗?您低估了XAML。@H.B:您不能使切换按钮的样式通用:每次数据触发器都绑定到相反的按钮(分别为绿色和红色)。噢,snap,将触发器移动到单个样式中,并基于仅控制模板样式。@H.B:刚刚添加了更正的版本:参数化为DataContext@Vlad:我指的是我的版本(我在提交编辑之前测试过)。@H.B:实际上,触发器是不需要的,因为我们使用的是切换按钮。我会把它们完全移除。它总是内置的。WPF是在.NET3.0中引入的,BooleantVisibilityConverter也是如此。很好的建议,但在这种情况下并不有用,或者使用TabControl可能会有用。是否可以将tab按钮移到标题外?
<Page xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <Grid>
    <TabControl BorderThickness="0" Padding="0">
      <TabControl.Resources>
        <Style TargetType="TabItem">
          <Setter Property="Template">
            <Setter.Value>
              <ControlTemplate TargetType="TabItem">
              </ControlTemplate>
            </Setter.Value>
          </Setter>
        </Style>
      </TabControl.Resources>
      <TabItem Header="Not shown">
        <Grid Background="Red"/>
      </TabItem>
      <TabItem>
        <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center">Tab 2

        </TextBlock>
      </TabItem>
    </TabControl>
  </Grid>
</P