C# 如何在wpf中显示用户对按钮单击的控制?

C# 如何在wpf中显示用户对按钮单击的控制?,c#,wpf,user-controls,C#,Wpf,User Controls,我已经在wpf中创建了一个用户控件。我还创建了一个主窗口。现在,我想要的是,当我单击一个按钮(在主窗口中)时,一个用户控件显示为一个对话框。假设我有一个名为i-e create new user的按钮。现在,我想要的是在单击按钮时显示控件(我为新用户创建的控件),而不在主窗口中调用它。您可以轻松地添加另一个带有usercontrol的窗口 首先,创建另一个窗口(在解决方案资源管理器中单击鼠标右键,添加新项目,打开窗口)。 其次,将usercontrol拖到窗口上: <Window x:Cl

我已经在wpf中创建了一个用户控件。我还创建了一个主窗口。现在,我想要的是,当我单击一个按钮(在主窗口中)时,一个用户控件显示为一个对话框。假设我有一个名为i-e create new user的按钮。现在,我想要的是在单击按钮时显示控件(我为新用户创建的控件),而不在主窗口中调用它。

您可以轻松地添加另一个带有usercontrol的窗口

首先,创建另一个窗口(在解决方案资源管理器中单击鼠标右键,添加新项目,打开窗口)。 其次,将usercontrol拖到窗口上:

<Window x:Class="MyWpfApplication.Window1"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:DeleteMeTest="clr-namespace:DeleteMeTest"
        Title="Window1" Height="300" Width="300">
    <Grid>
        <MyWpfApplication:UserControl1 />
    </Grid>
</Window>
ShowDialog()方法打开一个对话框,这意味着窗口位于顶部,必须与之交互(关闭),然后才能返回与主窗口交互


您还可以使用Show方法来创建一个非阻塞窗口。

在WPF演示应用程序中,在主窗口()中创建用户控件


然后,在代码隐藏()中,不同的用户控件被隐藏或显示为按钮的单击操作的结果

/// <summary>
/// Hides the New User Control.
/// </summary>
private void HideNewUserControl()
{
     NewUserControl.Visibility = Visibility.Hidden;
     DiagramControl.Visibility = Visibility.Visible;
     enableButtons();

     if (family.Current != null)
        DetailsControl.DataContext = family.Current;
}

/// <summary>
/// Shows the New User Control.
/// </summary>
private void ShowNewUserControl()
{
        HideFamilyDataControl();
        HideDetailsPane();
        DiagramControl.Visibility = Visibility.Collapsed;
        WelcomeUserControl.Visibility = Visibility.Collapsed;

        if (PersonInfoControl.Visibility == Visibility.Visible)
            ((Storyboard)this.Resources["HidePersonInfo"]).Begin(this);

        NewUserControl.Visibility = Visibility.Visible;
        NewUserControl.ClearInputFields();
        NewUserControl.SetDefaultFocus();

        ... //Removed for brevity
    }
//
///隐藏新的用户控件。
/// 
私有无效HideNewUserControl()
{
NewUserControl.Visibility=Visibility.Hidden;
DiagramControl.Visibility=可见性.Visibility;
启用按钮();
如果(family.Current!=null)
DetailsControl.DataContext=family.Current;
}
/// 
///显示新的用户控件。
/// 
私有void ShowNewUserControl()
{
HideFamilyDataControl();
HideDetailsPane();
DiagramControl.Visibility=可见性。已折叠;
WelcomeUserControl.Visibility=Visibility.Collapsed;
if(PersonInfo控件.Visibility==Visibility.Visible)
((故事板)this.Resources[“HidePersonInfo”]).Begin(this);
NewUserControl.Visibility=可见性.Visibility;
NewUserControl.ClearInputFields();
NewUserControl.SetDefaultFocus();
…//为简洁起见,请删除
}
我鼓励您下载Family Show应用程序来查看源代码,或者至少在线下载

你可以把它放在一个单独的窗口,就像约翰内斯·霍夫迈斯特在回答时建议的那样


用户控件的主要优点是该用户界面块可以在应用程序中的多个点上使用。(例如,带有滚动、缩放和屏幕截图按钮的图形控件用户控件将出现在每个图形旁边,使其成为用户控件的理想候选)。

是的,我喜欢你的答案,也很欣赏。但这是一种专业的方式,因为这样就没有用户控制的好处了。我们为什么不在同一个窗口中编写整个内容,而不是使用用户控件呢。
private void Button_Click(object sender, RoutedEventArgs e)
{
    new Window1().ShowDialog();
}
<!-- New User Control -->
<local:NewUserControl x:Name="NewUserControl" 
HorizontalAlignment="Center" VerticalAlignment="Center"
AddButtonClick="NewUserControl_AddButtonClick"/>
/// <summary>
/// Hides the New User Control.
/// </summary>
private void HideNewUserControl()
{
     NewUserControl.Visibility = Visibility.Hidden;
     DiagramControl.Visibility = Visibility.Visible;
     enableButtons();

     if (family.Current != null)
        DetailsControl.DataContext = family.Current;
}

/// <summary>
/// Shows the New User Control.
/// </summary>
private void ShowNewUserControl()
{
        HideFamilyDataControl();
        HideDetailsPane();
        DiagramControl.Visibility = Visibility.Collapsed;
        WelcomeUserControl.Visibility = Visibility.Collapsed;

        if (PersonInfoControl.Visibility == Visibility.Visible)
            ((Storyboard)this.Resources["HidePersonInfo"]).Begin(this);

        NewUserControl.Visibility = Visibility.Visible;
        NewUserControl.ClearInputFields();
        NewUserControl.SetDefaultFocus();

        ... //Removed for brevity
    }