2015-05-01 3 views
0

У меня есть окно wpf и usercontrol. Окно WPF вызывает пользовательский элемент управления. Вот код:Отсутствует код пользователя WPF

xmlns:local="clr-namespace:Simple_Window" 

<local:WebBrowserTab x:Name="LeftWebBrowserTab" Grid.Column="0" Margin="32, -4, 0, 0" />  

Проблема заключается в том, что пользовательский контроль обрабатывается. Вот код:

public partial class WebBrowserTab : UserControl 
{ 
    public WebBrowserTab(MainWindow main) 
    { 
     InitializeComponent(); 

     _main = main; 
    } 
} 

При открытии новых окон откроется новое окно. Вот код:

NewWindow = new NewWindow(this); 

Как я могу добавить this на локальном local:WebBrowserTab элемент?

+0

Я предполагаю, что вы хотите передать свой главный конструктор конструктору, чтобы ваш UserComponent мог получить доступ к атрибутам/свойствам MainWindow. – Sidewinder94

+0

Правильно, 'this' будет использоваться как локатор. Тогда «MainWindow main» может забрать окно. – user3109009

+0

Я думаю, что вы делаете это неправильно, в случае пользовательского элемента управления вы должны определить несколько «DependencyProperty» для получения необходимых данных из главного главного окна и отправки данных обратно. Вы уже использовали 'Bindings' в WPF? – Sidewinder94

ответ

0

Если у вас нет действительно особой необходимости использовать переданные в Window в конструкторе, вероятно, было бы лучше, чтобы определить DependencyProperty (ParentWindow в данном примере) в UserControl вместо поля _main у вас есть сейчас, и затем связать Окно к нему.

<local:WebBrowserTab ParentWindow="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Window}}}" x:Name="LeftWebBrowserTab" Grid.Column="0" Margin="32, -4, 0, 0" /> 

Без больше контекста не ясно, почему вы делаете это, но вы также можете иметь возможность просто найти родительское окно внутри управления с

Window.GetWindow(this); 

, но как выше способом вы будете не сможете использовать это значение в конструкторе.

Смежные вопросы