5

残念ながら、TabControl.SelectionChangingイベント(Selector.SelectionChanging)はありません。変更要求をキャンセルできるように、この動作を実装するのに苦労しています。

TabControl.Items.CurrentChangingItemsプロパティis and ItemCollection)イベント設定e.Cancel(of )をtrueに処理しようとしましCurrentChangingEventArgsたが、コレクション内のアイテムは変更されていませんが、UIは新しいタブで更新されます。

TabItem条件が満たされないときにユーザーが別のユーザーに切り替えるのを防ぐ方法はありますか?

4

2 に答える 2

6

これが起こる正確な理由はわかりません。

しかし、これが私の回避策です:

以下のサンプルでは、​​チェックボックスは現在のタブを「ロック」しています。したがって、チェックされていると、ユーザーはタブを変更できません。

void Items_CurrentChanging(object sender, CurrentChangingEventArgs e)
{
    if (checkBox1.IsChecked.Value)
    {
        var item = ((ICollectionView)sender).CurrentItem;

        e.Cancel = true;

        tabControl1.SelectedItem = item;
    }
}

基本的に、(これを正しく理解していれば) ビジュアル ツリーは更新されますが、論理ツリーは更新されません。上記の方法により、ビジュアルが強制的に論理ツリーと同期されます。

于 2010-11-16T13:22:32.917 に答える
0

TabItemでPreviewLostKeyboardFocusイベントを処理し、イベント引数のHandledプロパティを に設定して、別のタブへの切り替えを防ぐこともできます。true

protected void tabItem_PreviewLostKeyboardFocus(object sender,
    KeyboardFocusChangedEventArgs e)
{
    if (!ValidateTabItem((TabItem) sender)) {
        e.Handled = true;
    }
}

http://www.netframeworkdev.com/windows-presentation-foundation-wpf/how-to-cancel-navigation-between-tabitems-in-a-tabcontrol-84994.shtmlを参照してください。

于 2010-11-16T13:27:51.463 に答える