2012-02-01 45 views
0

我希望能够在其TabControl页面内访问我的窗口的公共成员。从其子选项卡访问主窗口属性

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

我:

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

主窗口的Loaded事件期间标签的基于代码的人口,而不是,:要做到这一点,我已经试过使用XAML切换m使用Tab中的Frame并在Frame中加载XAML页面。通过这种方式,我认为构造将提供给我,让我可以通过一个指针到Page类:

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

,但我发现,加载XAML需要一个空的构造。另外,newFrame.Content始终为NULL。我认为这与XAML尚未在此阶段加载有关,但我无法确定何时会执行XAML加载,如果晚些时候,我如何设置“父”指针。

感谢您的任何建议。我是一个新手WPF编码器,所以请指导我。

+0

是否有一个原因,您不能使用数据绑定来访问属性? – 2012-02-01 18:21:36

+0

那么它与数据无关 - 当用户单击选项卡中的特定列表项时,我试图在主窗口上更新状态指示器。 – Jarvis 2012-02-01 21:03:12

回答

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); 
0

看看this answer。您可以使用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>