2016-05-03 6 views
1

私はComboBoxを持つWPFフォームを持っています。私のコンボボックスを展開し、メモ帳などのアプリケーションを開くと、アプリケーションはWPFフォームをカバーしますが、展開されたComboBox部分は上に表示されます。メモ帳アプリケーションは、WPFフォームとそのコンボボックスの展開部分(コンボボックスのドロップダウン)の間にあるので、表示されます。 ComboBoxには常にzオーダーの先頭に展開されたドロップダウンが表示されるようです。 これは、beeingがWPFフォームを閉じることができないなどのその他の問題を引き起こしていません。 これは間違っています。WPF ComboBox - 展開されている場合、すべてのウィンドウの上にとどまります

enter image description here

上:

  • Z-1、拡張コンボボックスと私のWPFフォームのzオーダーである(ただし、拡張領域が開かれたアプリケーションの上にあることに注意してWPFフォームを重ねます

  • z-2はメモ帳アプリケーションを開き、ComboBoxでWPFフォームをオーバーラップさせたものです(メモ帳はWPFフォームと重複していますが、ComboBoxの展開されたドロップダウンリストはメモ帳と重なっています。その前にtepad、ではない)

  • Z-3は、z-1オーダー

とWPFフォーム上にある私のコンボボックスの拡大ドロップダウンである私のコンボボックスは、ユーザーコントロールの一部であり、そのXAMLは次のようですこの

<ComboBox Name="MyComboBox" 
       ItemsSource="{Binding ItemsSet}" 
       DisplayMemberPath="Name" 
       SelectedValuePath="Name" 
       SelectedItem="{Binding Path=SelectedItem}" 
       BorderBrush="Green" 
       BorderThickness="2"> 
    </ComboBox> 

どのように私は提供スクリーンショットの問題を防ぐことができますか?

+1

あなたの質問がありますか? :) WPFコンボボックスのデフォルトのコントロールテンプレートは、展開されたコンボボックスアイテムリストのポップアップコントロールを使用します。これは、どのレイヤが表示されるかという点でOSレベルの優先順位があると考えられます。 – Rowbear

+0

@Rowbear更新を参照してください。スクリーンショットと更新された説明を参照した後、より意味をなさないと思います。非常に感謝 – pixel

答えて

0

私のComboBoxを含むWPFフォームをxamlにTopMost = "True"として設定することでこれを "固定"しました。完璧な修正ではありませんが、少なくとも愚かな見た目とそれ以外のすべての問題を取り除きました。私はMSがこのデフォルトの動作をしたとは信じられません。

1

私はこの動作がほとんどの場合「間違っている」ことを理解しています。現在のアプリケーションでフォーカスが失われた場合、いつドロップダウンを開いたままにしておきたいですか?しかし、私のコメントで述べたように、それはポップアップコントロールの設計された動作です。フードの下にあるWPFコンボボックスは、実際にはToggleButtonが切り替わったときに開くように設定されたPopupコントロールを持つToggleButtonです。だからあなたが見ている問題を防ぐ方法は、ポップアップコントロールがすべてのアプリケーションの上にとどまるのを防ぐことです。

はそのためにStackOverflowの質問:) answersPopup always stays on top

一つは、実際に望ましくない動作を防ぐために、user32.dllの使用派生/カスタムポップアップコントロールでコードスニペットを持ってあります。

大丈夫です。ポップアップを修正する方法ですが、どのようにしてComboBoxを修正しますか?標準のWPFポップアップではなく、一番上にない固定ポップアップコントロールを使用するには、デフォルトのControlTemplateをオーバーライドするだけです。

+0

ありがとうが、私は以下のように行くことにした。とても有難い。 – pixel

関連する問題