WPF окно хостинга usercontrol - PullRequest
       6

WPF окно хостинга usercontrol

7 голосов
/ 05 февраля 2010

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

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

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

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

Ответы [ 2 ]

14 голосов
/ 05 февраля 2010

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

...

MyUserControl userControl = new MyUserControl();

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

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

...
1 голос
/ 05 февраля 2010

Вам необходимо:

  1. Создайте некоторые открытые свойства в диалоговом окне, чтобы передать значения
  2. Свяжите свой 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...