Доступ к свойствам главного окна из его дочерних вкладок - PullRequest
0 голосов
/ 01 февраля 2012

Я хочу иметь возможность доступа к открытым членам моего Окна из его страниц TabControl. Для этого я попытался переключиться с использования XAML:

    <TabControl TabStripPlacement="Left" HorizontalContentAlignment="Left" Name="wizardTabs">
        <TabItem Header="Login">
            <Frame Source="LoginPage.xaml" IsTabStop="False"/>
        </TabItem>
    </TabControl>

вместо заполнения вкладок на основе кода во время события Loaded главного окна:

        newFrame = new Frame();
        newFrame.Source = new Uri(@"\LoginPage.xaml", UriKind.Relative);
        newFrame.IsTabStop = false;
        tabItem = new TabItem();
        tabItem.Header = "Login";
        tabItem.Content = newFrame;
        wizardTabs.Items.Add(tabItem);

Я использую фрейм во вкладке и загружаю страницу XAML во фрейм. Таким образом, я подумал, что мне будет доступен конструктор, чтобы я мог передать указатель this в класс Page:

        LoginPage loginPage = newFrame.Content as LoginPage;
        loginPage.parent = this;

но я обнаружил, что для загрузки XAML требуется пустой конструктор. Кроме того, newFrame.Content всегда равно NULL. Я думаю, что это связано с тем фактом, что XAML не был загружен на этом этапе, но я не могу понять, когда будет выполнена эта загрузка XAML, и если это будет позже, как я могу установить указатель «родителя» .

Спасибо за любые предложения. Я новичок в кодировке WPF, поэтому, пожалуйста, помогите мне.

Ответы [ 2 ]

0 голосов
/ 02 февраля 2012

Хорошо, я нашел решение. Вместо использования свойства .Source я могу использовать метод Navigate (), используя экземпляр объекта напрямую, а не URI. Таким образом, код выглядит следующим образом:

newFrame = new Frame();
newFrame.Navigate(new LoginPage(this));
newFrame.IsTabStop = false;
tabItem = new TabItem();
tabItem.Header = "Login";
tabItem.Content = newFrame;
wizardTabs.Items.Add(tabItem);
0 голосов
/ 02 февраля 2012

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

<TabControl TabStripPlacement="Left" HorizontalContentAlignment="Left" Name="wizardTabs" ItemsSource= [YourBinding]>
  <TabControl.ItemContainerStyle>
    <Style TargetType="TabItem">        
        <Setter Property="Content" Value="{Binding newFrame}"/>
    </Style>
</TabControl.ItemContainerStyle>
    <TabItem Header="Login">
        <Frame Source="LoginPage.xaml" IsTabStop="False"/>
    </TabItem>
</TabControl>
...