Wie zeigt man ein benutzerdefiniertes UserControl als Dialog an?


Antworten:


148

Platzieren Sie es in einem Fenster und rufen Sie Window.ShowDialog auf . (Fügen Sie außerdem Verweise auf: PresentationCore, WindowsBase und PresentationFramework hinzu, falls Sie dies noch nicht getan haben.)

private void Button1_Click(object sender, EventArgs e)
{
        Window window = new Window 
        {
            Title = "My User Control Dialog",
            Content = new MyUserControl()
        };

        window.ShowDialog();
}

16
Ich fand auch, dass das Festlegen von SizeToContent = SizeToContent.WidthAndheight und ResizeMode = ResizeMode.NoResize hilfreich war, damit das Benutzersteuerelement die Größe definieren kann.
Taylor Leese

4
Wie können wir die this.Close()Funktion für diesen UserControl-Dialog verwenden?
Manikandan Sethuraju

4
private void btnClose_Click (Objektabsender, RoutedEventArgs e) {var parent = this.Parent as Window; if (parent! = null) {parent.DialogResult = true; parent.Close (); }}
Ashish Singh

1
Wenn Sie möchten, dass das Dialogfenster oben angezeigt wird und beim Klicken auf ein anderes Fenster "blinkt", legen Sie den Eigentümer fest. Owner = Application.Current.MainWindow
Scott Solmer

13
Window window = new Window
            {
                Title = "My User Control Dialog",
                Content = new OpenDialog(),
                SizeToContent = SizeToContent.WidthAndHeight,
                ResizeMode = ResizeMode.NoResize
            };
            window.ShowDialog();

Hat wie eine Magie für mich gearbeitet. Kann es als modaler Dialog gemacht werden?


Ans: ShowDialog selbst machen es als Modal Dialog .. ...


SizeToContent ist sehr nützlich. Vielen Dank.
Honzakuzel1989

2

Soweit ich weiß, kannst du das nicht. Wenn Sie es in einem Dialogfeld anzeigen möchten, ist dies vollkommen in Ordnung. Erstellen Sie einfach ein neues Fenster, das nur Ihr UserControl enthält, und rufen Sie ShowDialog () auf, nachdem Sie eine Instanz dieses Fensters erstellt haben.

BEARBEITEN: Die UserControlKlasse enthält keine Methode ShowDialog. Was Sie also versuchen, ist tatsächlich nicht möglich.

Dies ist jedoch:

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

1
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();
        }
    }
}

Die Verwendung ist möglicherweise so einfach wie UserControlInstance.ShowDialog (). Eine besser angepasste Implementierung wäre, die Window-Klasse zu erweitern und sie mithilfe des Designers und des Codes anzupassen, um alle Funktionen zu erhalten.


Schönes Beispiel, nur für den Fall von WPF (System.Windows.Window.ShowDialog ()) Der Rückgabetyp sollte bool sein? (Nullable Type)
Ashish Singh

1

Ich weiß, dass dies für .net 3.5 ist, aber hier ist eine praktikable Lösung für .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();

0

Sie können auch MaterialDesignThemes.Wpf verwenden (herunterladbar auf NuGet, .NET 4.5+). Dann können Sie einfach tun:

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

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

-1

Wenn die Antwort von 'sixlettervariables' so geändert wird, funktioniert es

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 ( );
}

14
Du hast es vergessen Background = Brushes.Purple; Ohne das geht es nicht.
Lee Louviere
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.