c# - 在当前用户控件中单击按钮时显示不同的用户控件

标签 c# wpf xaml

我目前有两个用户控件,比如 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)UC2VisibilityUC1 的,并使用转换器。

<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/

相关文章:

javascript - dropzone.js 文件上传超出最大请求长度

c# - 如何将 XAML 插入 RichTextBox?

wpf - XAML 和 QML 等声明式 UI 语言在现实世界中有何好处?

c# - OnPropertyChanged 不编译

.net - WPF 验证文本框,绑定(bind)应该是什么样子?

c# - 部署带有数据库的 C# 程序以在 LAN 上工作的建议

c# - 我怎么知道方法在C#中引发的所有异常?

wpf - XAML SVG 在运行时颜色变化

.net - XAML&WPF中如何实现可分离控件

c# - 如果在数据网格 C# 中选中复选框,则获取整行值