2009-05-27 5 views
7

ユーザーがボタンをクリックし、その下の小さなパネルにボタンとテキストボックス、場合によっては小さなアイテムのリストがポップアップするUIシーケンスを作成したいとします。 ダイアログは非モーダルであり、より重要なことに、メインウィンドウの他の場所をクリックすると消えてしまいます。WPFの非モーダルフローティングダイアログ

たとえば、Internet Explorer 7の[お気に入り]スターアイコンをクリックするか、Firefoxのロケーションバーのスターを2回クリックすると、ブックマークエディタダイアログが表示されます。

これを達成する最もクリーンな方法は何ですか?

私はUserControlを使用し、ボタンをクリックしたときにその場所を絶対に修正する必要がありますか? もしそうなら、ユーザーが別の場所をクリックするとどうやって隠すのですか?

答えて

13

あなたが探しているものを行う最もクリーンな方法は、Popupを使用することです。 Popupクラスは、画面上の残りの要素の上に浮動する要素を表示しますが、非モーダルであり、ユーザーがそれをクリックしたときに消えるように構成できます。非モーダルダイアログに最適です。 Popupクラスには、別のコントロール(ユーザーがポップアップを開くために押したいボタン)に対して相対的な位置をコントロールできるプロパティがあります。

は、ここですべてのXAMLの例です:

<Grid> 
    <ToggleButton HorizontalAlignment="Center" VerticalAlignment="Top" 
        x:Name="PopButton" Content="Pop"/> 
    <Popup Placement="Bottom" PlacementTarget="{Binding ElementName=PopButton}" StaysOpen="False" 
      IsOpen="{Binding ElementName=PopButton, Path=IsChecked, Mode=TwoWay}"> 
     <Rectangle Height="100" Width="200" Fill="Blue"/> 
    </Popup> 
</Grid> 

あなたはまた、/コードからポップアップを閉じる開くためのコマンドやイベントハンドラを使用することができます。

ポップアップが表示される場所と相対的に表示されるコントロール(マウスの現在位置と相対位置を基準に表示させるための他のオプションもあります)が設定されています。 StaysOpenをFalseに設定すると、ユーザーがポップアップをクリックしたときにポップアップが自動的に閉じられます。

デフォルトでは、ポップアップには独自のスタイルはありません。これはフローティングコンテンツ用のコンテナなので、ウィンドウのクロム/ツールバー/などのようにスタイルを設定する必要があります。適切に。

+0

これは私が必要としていたものです。ありがとう。 –

関連する問題