将WPF中的选项卡内容分配给页面

时间:2012-08-21 11:17:58

标签: c# wpf tabcontrol tabitem contentcontrol

我正在尝试向我的应用添加动态标签。现在,如果我点击一个按钮,它将打开一个新页面。我想要的是在新标签页中打开此页面。但是当我将标签内容设置到页面时,代码会抱怨。我想做这样的事情

private void bttnGoToClientsOnClick(object sender, RoutedEventArgs e)
        {
            var content = new TextBlock();
            TabItem tab = new TabItem();
            tab.Header = "Search Page";
            SearchPage sp = new SearchPage();
            tab.Content = sp;
            tabControl.Items.Add(tab);
            this.NavigationService.Navigate(sp);
        }

有什么方法可以将我的页面转换为usercontrol或将其转换为用户控件

谢谢!

2 个答案:

答案 0 :(得分:2)

  

但是当我将标签内容设置为页面时,代码会抱怨。

如果你在这里更具体,那就不会受到伤害:)

什么是SearchPage课程?它似乎不是WPF框架的一部分。我在Google上搜索了它 http://www.intersoftpt.com/网站。是吗?

TabItem.Content必须是ContentControl类型,SearchPage - 显然 - 不是。我确定您需要将此SearchPage对象嵌入到某个控件展示器(例如面板)中,然后才能将其分配给TabItem.Content


<强>更新

试试这个,然后:

        TabItem tab = new TabItem();
        tab.Header = "Search Page";
        SearchPage sp = new SearchPage();
        this.NavigationService.Navigate(sp);
        // ---------------------------------------------------- 
        var frame = new Frame(); // !
        frame.Navigate(sp);  // !
        tab.Content = frame; // !
        // ---------------------------------------------------- 
        tabControl.Items.Add(tab);

虽然我认为这应该有用,但我还没有测试过。如果不能解决问题,请告诉我。

答案 1 :(得分:2)

您始终可以直接在XAML定义中创建自己的UserControls(即使它们是部分页面或窗口)。

在这个例子中,我假设您的SearchClass是在[YourProject] .Model命名空间中定义的(其中[YourProject]是项目的名称)

<UserControl x:Class="WpfApplication1.UserControl1"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             xmlns:search="clr-namespace:[YourProject].Model">
    <search:SearchClass>
        <!--<Grid>
            ...ANYTHING YOU WANT HERE ! ...
        </Grid>-->
    </search:SearchClass>
</UserControl>

现在您可以创建UserControl的实例,即使在XAML或代码隐藏中也是如此(请记住只是正确声明命名空间!):

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:ctrls="clr-namespace:WpfApplication1"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <UserControl1 />
    </Grid>
</Window>

...这是我的代码隐藏......

UserControl1 myControl = new UserControl1();