Wie wird eine benutzerdefinierte UserControl
Datei in C # / WPF (.NET 3.5) als Dialogfeld angezeigt ?
71
Wie wird eine benutzerdefinierte UserControl
Datei in C # / WPF (.NET 3.5) als Dialogfeld angezeigt ?
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();
}
this.Close()
Funktion für diesen UserControl-Dialog verwenden?Owner = Application.Current.MainWindow
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 .. ...
quelle
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
UserControl
Klasse 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(); }
quelle
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.
quelle
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();
quelle
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
quelle
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 ( ); }
quelle
Background = Brushes.Purple
; Ohne das geht es nicht.