2010-02-05 5 views
7

У меня есть usercontrol, который я использую для редактирования некоторых объектов в моем приложении.WPF window hosting usercontrol

Я недавно пришел к экземпляру, где хочу открыть новый диалог (окно), на котором будет размещаться этот пользовательский контроль.

Как создать новое окно и передать любые свойства, которые необходимо установить из окна в usercontrol?

Спасибо за ваше время.

+0

Контролирует ли ваш пользовательский контроль объекты, которые вы редактируете? Дополнительная информация может быть полезна. Что касается вариантов создания экземпляра в новом окне ... вы можете попробовать всплывающее окно или новое окно, в котором пользовательский контроль будет дочерним, и просто вызовите метод .Show() после того, как вы установите свойства или привяжите значения к тому, что вы редактируете. – Scott

ответ

14

Вы можете просто установить содержимое своего нового окна в свой пользовательский элемент управления. В коде, это будет что-то вроде этого:

... 

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

Мне нравится, когда это так просто и просто –

1

Вам нужно:

  1. Создать некоторые общие свойства в диалоговом окне, чтобы передать значения
  2. Bind вашего UserControl для тех общественных свойств в вашем диалоговом окне Окно
  3. Отобразите диалоговое окно Окно в диалоговом окне, если необходимо
  4. (необязательно) извлекать значения из окна, которые связаны двусторонним образом с вашим пользовательским управлением

Вот некоторые псевдокод, который выглядит замечательно, как C# и XAML:

Как показать окно, как диалог:

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

и источник

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

и 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> 

вы сделали бы то же самое в своем UserControl, как и в своем окне, чтобы создавать общедоступные свойства, а затем привязываться к ним в xaml.