2009-08-11 7 views

risposta

114

Posizionarlo in un Window e chiamare 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

Ho anche trovato che l'impostazione SizeToContent = SizeToContent.WidthAndheight e ResizeMode = ResizeMode.NoResize erano utili in modo che consentisse al controllo dell'utente di definire la dimensione. –

+2

Come possiamo usare la funzione 'this.Close()' in questa finestra di dialogo UserControl? –

+1

vuoto privato btnClose_Click (oggetto mittente, RoutedEventArgs e) { \t var parent = this.Parent come Finestra; \t if (parent! = Null) \t { \t \t parent.DialogResult = true; \t \t parent.Close(); \t} } –

2

Per quanto ne so non puoi farlo. Se vuoi mostrarlo in una finestra di dialogo, va benissimo, basta creare una nuova finestra che contenga solo il tuo UserControl e chiamare ShowDialog() dopo aver creato un'istanza di quella finestra.

EDIT: Il UserControl classe non contiene un metodo ShowDialog, quindi quello che stai cercando di fare è di fatto impossibile.

Questo, tuttavia, è:

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

Se la risposta da 'sixlettervariables' viene modificato come così, funziona

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

Si è dimenticato 'Sfondo = Pennelli.Purple'; non funzionerà senza quello –

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

ha lavorato come una magia per me. Può essere creato come una finestra di dialogo modale?


Ans: ShowDialog è di per sé rendono come Dialogo modale .. ...

+0

SizeToContent è molto utile. Grazie. – 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(); 
     } 
    } 
} 

L'uso di esso forse il più semplice UserControlInstance.ShowDialog(). Un'implementazione personalizzata migliore sarebbe estendendo la classe Window e personalizzandola usando il designer e il codice per ottenere qualsiasi funzionalità.

+0

Bel esempio, solo in caso di WPF (System.Windows.Window.ShowDialog()) Il tipo restituito dovrebbe essere bool? (Tipo Nullable) –

Problemi correlati