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