我希望能够从其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程序员,所以请指导我。
答案 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);