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

ページをusercontrolに変換したり、usercontrolとしてキャストしたりする方法はありますか

ありがとうございました!

4

2 に答える 2

2

しかし、タブのコンテンツをページに設定すると、コードが文句を言います。

ここでもっと具体的にしても害はありません:)

SearchPageクラスとは何ですか?WPFフレームワークの一部ではないようです。http://www.intersoftpt.com/のWebサイトでグーグルで検索しました 。それですか?

TabItem.ContentContentControlタイプである必要がありますが、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 に答える
2

XAML定義で直接(部分的なページまたはウィンドウであっても)、いつでも独自のUserControlを作成できます。

この例では、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>

これで、XAMLまたは分離コードでもUserControlのインスタンスを作成できます(名前空間を正しく宣言することだけを忘れないでください!):

<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 に答える