7

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

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

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

UserControlを使用して、ボタンがクリックされたときにその場所を完全に修正する必要がありますか?もしそうなら、ユーザーがどこかをクリックしたときにそれを非表示にするにはどうすればよいですか?

4

1 に答える 1

13

私はあなたが探していることをする最もきれいな方法はポップアップを使うことだと思います。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>

コマンドまたはイベントハンドラーを使用して、コードからポップアップを開いたり閉じたりすることもできます。

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

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

于 2009-05-27T13:07:30.150 に答える