1

作成したいCustomWindowこのように動作するクラス:1。ウィンドウの非クライアント領域も使用されます。GoogleChromeのようにウィンドウタイトルの代わりにTabControlのタブが表示されます。2.タブは右に埋め込まれているため、ウィンドウが小さすぎる場合、最小/最大/閉じるボタンがタブと衝突しません。これは、TabControlテンプレートで実行できるはずです。3. Google Chromeの「新しいタブ」ボタンのように、タブの後にボタンがあります。繰り返しますが、これはTabControlのカスタム実装と、レンダリング用の偽の子を作成することで実行できるはずです。4.私のクラスはWindowクラスを継承し、子コレクション内のすべての子は、TabControl.ItemsSourceがWindow.Childrenにバインドされている場合と同様に、TabControlタブにマップされます。5. Windowは、子コレクションのように動作するプロパティItemsSourceも公開します。6. Windowは、TabControlがItemTemplateとして認識するものをスタイル設定する方法を提供します。CustomWindow.ItemsSource = new string[] { "a", "b", "c" };アイテムのテンプレートを作成すると、3つのタブが作成され、タブヘッダースタイルがCustomWindowクラスにハードコーディングされ、タブアイテムのコンテンツ領域がユーザーによってテンプレート化されます。

ご覧のとおり、これは基本的にGoogle Chromeウィンドウの概要であり、まさに私が達成しようとしていることです。システムメニュー、ダブルクリックの最大化などを処理して、ウィンドウのクロムを好きなように曲げる方法を知っています。しかし、Windowから継承されたクラスを作成して、子だけを選択したTabControlにする方法はわかりません(タブヘッダーのスタイルが設定されています)が、実際には、子コレクションはTabControls子コレクションになります。私はWPFの経験があまりありません。これを正しい方法で開始したいので、将来書き直す必要はありません。

さらに、これが解決されたら、ピン留めされているタブをユーザーに知らせる方法を提供したいと思います。これは、CustomWindow.IsPinnedのような添付プロパティをCustomWindowで定義することで最もよく達成されると思います。

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

4

1 に答える 1

1

DependencyProperty ItemsSourceをウィンドウに追加します(タイプIEnumerable<object>およびウィンドウテンプレートでタブコントロールを設定しますItemsSource="{TemplateBinding ItemsSource}"。これにより、ウィンドウに独自の子コレクションが作成され、タブコントロールのタブアイテムとしてレンダリングされます。

于 2012-11-14T21:40:54.517 に答える