Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将自定义用户控件显示为对话框?_C#_.net_Wpf - Fatal编程技术网

C# 如何将自定义用户控件显示为对话框?

C# 如何将自定义用户控件显示为对话框?,c#,.net,wpf,C#,.net,Wpf,如何在C#/WPF(.NET 3.5)中将自定义文件显示为对话框?将其放置在and调用中。 (另外,如果尚未添加对PresentationCore、WindowsBase和PresentationFramework的引用,请添加这些引用。) 据我所知,你不能那样做。如果您想在对话框中显示它,那很好,只需创建一个只包含UserControl的新窗口,并在创建该窗口的实例后调用ShowDialog() 编辑: 该类不包含ShowDialog方法,因此您尝试执行的操作实际上是不可能的 然而,这是: p

如何在C#/WPF(.NET 3.5)中将自定义文件显示为对话框?

将其放置在and调用中。 (另外,如果尚未添加对PresentationCore、WindowsBase和PresentationFramework的引用,请添加这些引用。)


据我所知,你不能那样做。如果您想在对话框中显示它,那很好,只需创建一个只包含UserControl的新窗口,并在创建该窗口的实例后调用ShowDialog()

编辑: 该类不包含ShowDialog方法,因此您尝试执行的操作实际上是不可能的

然而,这是:

private void Button_Click(object sender, RoutedEventArgs e){
    new ContainerWindow().ShowDialog();
}

如果将“sixlettvariables”的答案修改为“sixlettvariables”,则该答案有效

private void button1_Click ( object sender, RoutedEventArgs e )                  
{
    Window window = new Window
    {
        Title = "My User Control Dialog",
        Content = new UserControl ( ),
        Height = 200,  // just added to have a smaller control (Window)
        Width = 240
    };

    window.ShowDialog ( );
}
这对我来说是个奇迹。 它可以作为一个模态对话框吗


Ans:ShowDialog将其自身制作为模态对话框

namespace System.Window.Form
{
    public static class Ext
    {
        public static DialogResult ShowDialog(this UserControl @this, string title)
        {
            Window wind = new Window() { Title = title, Content = @this };
            return wind.ShowDialog();
        }
    }
}
它的使用可能与UserControlInstance.ShowDialog()一样简单。
更好的定制实现是通过扩展窗口类并使用设计器和代码对其进行定制,以获得任何功能。

我知道这是针对.net 3.5的,但这里有一个适用于.net 2.0的可行解决方案

  MyUserControl myUserControl= new MyUserControl();

  Form window = new Form
  {
    Text = "My User Control",
    TopLevel = true,
    FormBorderStyle = FormBorderStyle.Fixed3D, //Disables user resizing
    MaximizeBox = false,
    MinimizeBox = false,
    ClientSize = myUserControl.Size //size the form to fit the content
  };

  window.Controls.Add(myUserControl);
  myUserControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
  window.ShowDialog();

您还可以使用MaterialDesignThemes.Wpf(可在NuGet.NET4.5+上下载)。然后你可以简单地做:

{
    var view = new YourUserControl();
    var result = await DialogHost.Show(view, "RootDialog", ClosingEventHandler);
}

private void ClosingEventHandler(object sender, DialogClosingEventArgs eventArgs)
{ }  //Handle Closing here

我还发现设置SizeToContent=SizeToContent.WidthAndheight和ResizeMode=ResizeMode.NoResize很有帮助,因此它可以让用户控件定义大小。我们如何使用
this.Close()
函数来创建此用户控件对话框?private void btnClose_Click(对象发送方,RoutedEventTargets e){var parent=this.parent作为窗口;if(parent!=null){parent.DialogResult=true;parent.Close();}如果您希望对话框窗口位于顶部,并在单击其他窗口时“闪烁”,请设置所有者。
owner=Application.Current.MainWindow
您忘记了
Background=brush.Purple
;没有它就无法工作。很好的示例,仅在WPF(System.Windows.window.ShowDialog())的情况下,返回类型应该是bool?(可空类型)SizeToContent非常有用。谢谢。
  MyUserControl myUserControl= new MyUserControl();

  Form window = new Form
  {
    Text = "My User Control",
    TopLevel = true,
    FormBorderStyle = FormBorderStyle.Fixed3D, //Disables user resizing
    MaximizeBox = false,
    MinimizeBox = false,
    ClientSize = myUserControl.Size //size the form to fit the content
  };

  window.Controls.Add(myUserControl);
  myUserControl.Anchor = AnchorStyles.Top | AnchorStyles.Bottom | AnchorStyles.Left | AnchorStyles.Right;
  window.ShowDialog();
{
    var view = new YourUserControl();
    var result = await DialogHost.Show(view, "RootDialog", ClosingEventHandler);
}

private void ClosingEventHandler(object sender, DialogClosingEventArgs eventArgs)
{ }  //Handle Closing here