我目前有两个用户控件,比如 UC1 和 UC2。我有一个主窗口。在应用程序启动时,UC1 对用户可见。当用户单击 UC1 中的按钮时,UC1 应该消失,而 UC2 应该显示在同一窗口中。我尝试了以下方法:
主窗口.xaml
<Window x:Class="Test.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" xmlns:my="clr-namespace:Test" WindowState="Maximized">
<Grid>
<my:UC1 />
<my:UC2 Visibility="Collapsed"/>
</Grid>
最初两个 UC 同时可见,所以我制作了 UC2 Collapsed。现在我想让它在单击 UC1 中的按钮时再次可见。我无法从 UC1 访问 UC2 的可见性。
UC1.xaml.cs
private void button2_click(object sender, MouseButtonEventArgs e)
{
this.Visibility = System.Windows.Visibility.Collapsed;
// What to write here?
}
编辑
对于 2 个 Controller UC1 和 UC2,使用 Tag 属性效果很好。现在我添加了另一个 Controller UC3,它仅在单击不同的按钮后才可见。
所以,最后我有了 UC1、UC2 和 UC3,其中只有 UC1 是可见的。 UC1 有两个按钮,单击第一个按钮时,只有 UC2 应该可见,单击第二个按钮时,只有 UC3 应该可见。
我无法绑定(bind)多个标签。有没有多标签转换器?
最佳答案
<Grid>
<my:UC1 Name="UC1" />
<my:UC2 Name="UC2" Visibility="Collapsed"/>
</Grid>
private void button2_click(object sender, MouseButtonEventArgs e)
{
this.UC1.Visibility = System.Windows.Visibility.Collapsed;
this.UC2.Visibility = System.Windows.Visibility.Visible;
}
编辑:
刚刚意识到您的按钮在 UC1 中。有很多方法可以做到这一点,但这可能是代码最少的一种方法。
<Grid>
<my:UC2 Name="UC2" Visibility="Collapsed" />
<my:UC1 Tag="{Binding ElementName=UC2}" />
</Grid>
private void button2_click(object sender, MouseButtonEventArgs e)
{
this.Visibility = System.Windows.Visibility.Collapsed;
var uc2 = this.Tag as UC2;
if (uc2 != null)
uc2.Visibility = System.Windows.Visibility.Visible;
}
此方法最短,但其他人可能更难弄清楚您写的内容。
如果你想要一个好的方法,在MainWindow
上做,绑定(bind)UC2
的Visibility
到UC1
的,并使用转换器。
<Grid>
<Grid.Resources>
<converters:VisibilityInversionConverter x:Key="VisibilityInversionConverter" />
</Grid.Resources>
<my:UC1 Name="UC1" />
<my:UC2 Visibility="{Binding ElementName=UC1, Path=Visibility, Converter={StaticResource VisibilityInversionConverter}}" />
</Grid>
关于c# - 在当前用户控件中单击按钮时显示不同的用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38088220/