2009-08-11 14 views

Odpowiedz

114

Umieść go w Window i zadzwoń pod numer Window.ShowDialog.

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

    window.ShowDialog(); 
} 
+9

Odkryłem także, że ustawienie SizeToContent = SizeToContent.WidthAndheight i ResizeMode = ResizeMode.NoResize były pomocne, więc pozwala kontrolce zdefiniować rozmiar. –

+2

Jak możemy użyć funkcji 'this.Close()' do tego okna dialogowego UserControl? –

+1

prywatny void btnClose_Click (obiekt nadawca, RoutedEventArgs e) { \t var parent = this.Parent jako Window; \t jeśli (rodzic! = Null) \t { \t \t parent.DialogResult = true; \t \t parent.Close(); \t} } –

2

O ile wiem, nie można tego zrobić. Jeśli chcesz pokazać to w oknie dialogowym, to całkiem dobrze, po prostu utwórz nowe okno, które zawiera tylko UserControl i wywołaj ShowDialog() po utworzeniu instancji tego okna.

EDIT: UserControl klasa nie zawiera metodę ShowDialog, więc co próbujesz zrobić, to w rzeczywistości nie jest możliwe.

To jednak jest:

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

Jeśli odpowiedź przez 'sixlettervariables' wprowadza się tak, że działa

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

Zapomniałeś o 'Background = Brushes.Purple'; to nie zadziała bez tego. –

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

Pracował jak magia dla mnie. Czy można to zrobić jako dialog modalny?


Odp: ShowDialog to samo uczynić go jak Modal Dialog .. ...

+0

SizeToContent jest bardzo przydatny. Dzięki. – honzakuzel1989

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

korzystanie z niej może być tak proste, jak UserControlInstance.ShowDialog(). Lepszą niestandardową implementacją byłoby rozszerzenie klasy okna i dostosowanie jej za pomocą projektanta i kodu w celu uzyskania dowolnej funkcjonalności.

+0

Dobry przykład, właśnie w przypadku WPF (System.Windows.Window.ShowDialog()) Typ powrotu powinien być bool? (Typ Nullable) –

Powiązane problemy