2017-02-06 9 views
0

У меня есть страница, которую я показываю в своем главном окне, но я не могу получить доступ к элементам управления на странице из файла cs главного окна.Доступ к элементам управления во встроенной странице в WPF

Это главное окно:

<Window 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Frame Name="frame0" Source="SubPage.xaml" /> 
    </Grid> 
</Window> 

Это страница, которую я хотел бы встроить:

<Page 
     d:DesignHeight="300" d:DesignWidth="300" 
     Title="SubPage"> 

    <Grid> 
     <Label x:Name="labelName" Content="Name:" /> 
     <TextBox x:Name="textName" Text="TextBox"/> 
    </Grid> 
</Page> 

Вот как я попытался получить доступ к суб-управления:

public partial class MainWindow : Window 
{ 
    private XmlDocument xmlDoc; 

    public MainWindow() 
    { 
     InitializeComponent(); 

     TextBox textName = (TextBox)frame0.Template.FindName("textName", frame0); 
    } 
} 

К сожалению, textName всегда null.

ответ

1

TextBox не является частью шаблона рамки. Это часть содержимого страницы.

Если вы установите атрибут x:FieldModifier в TextBox в SubPage.xaml к public или internal или подвергать его воздействию через свойство SubPage.xaml.cs класса ...:

<TextBox x:Name="textName" Text="TextBox" x:FieldModifier="public"/> 

... вы можете получить ссылку на него путь литья Content свойства Frame к SubPage разам страницы была навигация на:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     frame0.Navigated += Frame0_Navigated; 
    } 

    private void Frame0_Navigated(object sender, System.Windows.Navigation.NavigationEventArgs e) 
    { 
     SubPage subPage = frame0.Content as SubPage; 
     if (subPage != null) 
     { 
      TextBox textName = subPage.textName; 
     } 
     //remove the event handler 
     frame0.Navigated -= Frame0_Navigated; 
    } 
} 

До этого нет Page или TextBox, потому что экземпляр SubPage еще не создан.

+0

'SubPage subPage = frame0.Content as SubPage' является решением, спасибо. – Morgoth