問題
ViewModel にバインドする Chrome 形状のタブを使用するカスタム タブ コントロールがあります。形状のため、エッジが少し重なっています。TabControl_SelectionChanged
タブの選択とタブのドラッグ/ドロップで正常に機能する tabItem の ZIndex を設定する関数がありますが、リレー コマンドを使用してタブを追加または閉じると、異常な結果が得られます。誰にもアイデアはありますか?
デフォルトビュー:
タブの削除:
2 つ以上のタブを続けて追加する:
一度に複数のタブを追加しても、最近追加された他のタブの zindex はリセットされないため、右側のタブの後ろに移動します。また、タブを閉じると、それを置き換える SelectedTab の ZIndex が正しくレンダリングされず、タブの後ろに表示されます。右側のタブ。
ZIndex を設定するコード
private void PrimaryTabControl_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (e.Source is TabControl)
{
TabControl tabControl = sender as TabControl;
ItemContainerGenerator icg = tabControl.ItemContainerGenerator;
if (icg.Status == System.Windows.Controls.Primitives.GeneratorStatus.ContainersGenerated)
{
foreach (object o in tabControl.Items)
{
UIElement tabItem = icg.ContainerFromItem(o) as UIElement;
Panel.SetZIndex(tabItem, (o == tabControl.SelectedItem ? 100 :
90 - tabControl.Items.IndexOf(o)));
}
}
}
}
ブレークポイントを使用すると、ZIndex が目的の値に正しく設定されていることがわかりますが、レイアウトには変更が表示されません。変更のいくつかが有効であることはわかっています。なぜなら、それらのどれも機能していない場合、タブの端が逆になるからです (右のタブが左のタブの上に描画されます)。タブをクリックすると、すべてのタブ (上に描画する必要があるものを含む) の zindex が正しく設定され、それらをドラッグ/ドロップして再配置すると、正しくレンダリングされます (タブ項目が削除され、再挿入されます)。私が考えることができる唯一の違いは、MVVMデザインパターンを使用していることと、タブの追加/閉じるボタンがリレーコマンドであることです。
なぜこれが起こっているのか、どうすれば修正できるのか、誰にもわかりませんか??
ps ViewModel に ZIndex を設定してバインドしようとしましたが、relay コマンドを使用してタブを追加/削除すると同じことが起こります。