2011-01-31 17 views
3

WPF TabControlはSelectionChanging()イベントがなく、SelectionChangedイベントのみが存在するため、選択の変更をキャンセルする機能をサポートしていないようです。誰かがこれを行う方法を考え出していますか?WPF - TabControl - 選択の変更を防止する

私が見つけた唯一の方法は、各TabItemのPreviewMouseLeftButtonDown()イベントにアタッチし、その特定のページを選択したくない場合はe.Handledをtrueに設定することです。これはうまくいくようですが、はっきりとしています。

+2

ユーザーがタブを変更するための唯一の方法ではありませんが、それだけではありません。 – Tergiver

答えて

2

Hereあなたはすばらしい方法を見つけるでしょう。
私は以前にそれを見たことを覚えていて、それも好きでしたが、結局、回避策でそれを行いました。私はこの解決策に問題を抱えていましたが、回避策を使用する必要がありましたが、それは何かを覚えていません。

+0

スイッチがすでに完了した後にスイッチバックするだけではありませんか?左のタブのコントロールはすでに消えている可能性があります。 – ygoe

+0

これはおそらく問題でした:) – HCL

+1

他のサイトを読んでMicrosoftの参考ソースコードを調べた後、タブ項目の選択を防ぐのは不可能だと思います。とんでもない。それは停止することはできません。必要な場合は、別のコントロールを使用するか、独自のTabControlを動かします。多分私は別のUIコンセプトを使うでしょう。 – ygoe

0

これは、TabItemのスタイルを使用してこの動作を行い、その動作を制御するブール値にFocusableプロパティをバインドする方法を発見しました。親ビューモデルへのバインディングを取得するのはちょっと変わったものでしたが、おそらく改善する可能性があります。

これは、ユーザーがキーボードなどを使用した場合に発生しない可能性のあるクリックイベントのトリックを避けることができて便利です。

<TabControl.Resources> 
    <Style TargetType="{x:Type TabItem}"> 
     <Setter Property="Focusable" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.IsUpToDate}" /> 
     <Setter Property="HeaderTemplate"> 
      <Setter.Value> 
       <DataTemplate> 
        <TextBlock Text="{Binding Group}" /> 
       </DataTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</TabControl.Resources>