1

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

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

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

谢谢!

4

2 回答 2

2

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

在此示例中,我假设您的 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();
于 2012-08-21T11:56:12.290 回答
2

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

如果你在这里更具体一点也不会受到伤害:)

什么是SearchPage类?它似乎不是 WPF 框架的一部分。我在 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);

虽然我相信这应该可行,但我还没有测试过。如果它不起作用,请告诉我。

于 2012-08-21T11:28:42.580 回答