2010-02-05 16 views
7

Tengo un usercontrol que utilizo para editar algunos objetos en mi aplicación.ventana de WPF que aloja usercontrol

Recientemente he llegado a una instancia en la que quiero abrir un nuevo cuadro de diálogo (ventana) que alojará este control de usuario.

¿Cómo instalo la nueva ventana y paso cualquier propiedad que deba establecerse desde la ventana al control de usuario?

Gracias por su tiempo.

+0

¿Su control de usuario generalmente se vincula a los objetos que está editando? Más información puede ser útil. En cuanto a las opciones para crear instancias en una nueva ventana ... puede probar una ventana emergente o una nueva Ventana que tenga su control de usuario como un niño y solo llame al método .Show() después de establecer las propiedades o vincular los valores de a lo que estás editando – Scott

Respuesta

14

Puede simplemente configurar el contenido de su nueva ventana para su control de usuario. En el código, esto sería algo como esto:

... 

MyUserControl userControl = new MyUserControl(); 

//... set up bindings, etc (probably set up in user control xaml) ... 

Window newWindow = new Window(); 
newWindow.Content = userControl; 
newWindow.Show(); 

... 
+2

Me encanta cuando es así de simple y directo –

1

Es necesario:

  1. Crear algunas propiedades públicas en la ventana de diálogo para pasar en los valores
  2. vincular a su control de usuario a las propiedades públicas en su cuadro de diálogo Ventana
  3. Mostrar su cuadro de diálogo Ventana como diálogo cuando sea necesario
  4. (opcional) recuperar valores de la ventana que están vinculados bidireccionalmente a su control de usuario

aquí hay algo de pseudocódigo que se parece mucho a C# y XAML:

cómo mostrar una ventana como un diálogo:

var myUserControlDialog d = new MyUserControlDialog(); 
d.NeededValueOne = "hurr"; 
d.NeededValueTwo = "durr"; 
d.ShowDialog(); 

y la fuente

public class MyUserControlDialog : Window 
{ 
    // you need to create these as DependencyProperties 
    public string NeededValueOne {get;set;} 
    public string NeededValueTwo {get;set;} 
} 

y el XAML

<Window x:Class="MyUserControlDialog" xmlns:user="MyAssembly.UserControls"> 
<!-- ... --> 
    <user:MyUserControl 
    NeededValueOne="{Binding NeededValueOne, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" 
    NeededValueTwo="{Binding NeededValueTwo, RelativeSource={RelativeSource FindAncestor, AncestorType=Window}}" 
</Window> 

haría lo mismo en su UserControl como lo ha hecho en su ventana para crear propiedades públicas y luego vincularlas dentro de la xaml.

Cuestiones relacionadas