从其子选项卡访问主窗口属性

时间:2012-02-01 18:06:02

标签: c# wpf xaml tabcontrol

我希望能够从其TabControl页面中访问我的Window的公共成员。为此,我尝试使用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 :(得分:0)

看看this answer。您可以使用Setter Property将框架绑定到content属性:

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

答案 1 :(得分:0)

好的,我找到了解决方案。我可以直接使用对象的实例而不是使用URI来使用Navigate()方法,而不是使用.Source属性。所以代码看起来像这样:

newFrame = new Frame();
newFrame.Navigate(new LoginPage(this));
newFrame.IsTabStop = false;
tabItem = new TabItem();
tabItem.Header = "Login";
tabItem.Content = newFrame;
wizardTabs.Items.Add(tabItem);