2012-03-06 10 views
1

私は「メイン・コンテンツ」を含むWPFアプリケーションを作成していますを作ります。「モーダルダイアログは、」 - レイヤTabControlのと「ダイアログ」を含む - - レイヤのItemsControlを含むオーバーレイブロックキーイベント

XAMLは次のようになります。

<Grid> 
    <TabControl> 
    ..Some Tabs 
    </TabControl> 

    <ItemsControl> 
     <ContentControl Content={Binding Dialog1Property} /> 
     <ContentControl Content={Binding Dialog2Property} /> 
    </ItemsControl> 
</Grid> 

通常 "Dialog1Property" と "Dialog2Propertyは" ItemsControlには見えないことを意味するnullです。コントロールの1つにコントロールを割り当てるたびに、それはTabControlの前に表示されます。これはまさに私が望むものです。 Dialog - Propertiesの1つに不透明度0.7の灰色の矩形を割り当てると、グレーのオーバーレイが作成されます。

私はオーバーレイを通じて少し見えているタブ、をクリックすると、何も起こりません - 長方形のブロックマウスイベントを。ただし、Tabキーを使用してオーバーレイの背後にTabControlをフォーカスすることは可能です。したがって、ダイアログが表示されていてもタブを切り替えることは可能です。

は、それが出回っマウスクリックで行うように何とかキーイベントをブロックするように矩形を指示する簡単な方法はありますか?

よろしく BBRain

答えて

1

はい、あなたの長方形で、イベントPreviewKeyDownに加入。

<Rectangle Opacity="0.7" Fill="Green" PreviewKeyDown="Rectangle_PreviewKeyDown" /> 

ハンドラでは、単純にe.Handled = trueに設定します。 「プレビュー...」で始まるルーティングイベント以来

private void Rectangle_PreviewKeyDown(object sender, KeyEventArgs e) 
     { 
      e.Handled = true; 
     } 

はあなたの四角形の下の要素が入力を受け取るないだろう、トンネリングされています。

+0

PreviewKeyDown場合、これはおそらく問題を解決するだろう - イベントは、ケースではないようですこれは、解雇されるだろう。どんな考え? PreviewMouseDown - イベントが正常に発生します。マウスクリックが出回っブロックされているので、多くの私を助けていません...もちろん – BoltzmannBrain

+0

は、私は私のXAMLの終わりにテキストボックスを使用して問題を回避しました。私はその後、私は私のダイアログで、ループのフォーカス並べ替えそうにFocusManager AttachedPropertyを経由して私のダイアログの最初の要素にフォーカスを設定し、そのテキストボックスの「IsFocused」プロパティの変更に反応DataTriggerを作成しました。私は正しいソリューションのように聞こえるので、あなたの答えをとにかく受け入れるつもりです。私の場合にはうまくいかない理由は、おそらく残りのソースコードに関連する問題でしょう。 – BoltzmannBrain

関連する問題