他のコントロールの中でフレームをホストする WPF ウィンドウがあります。そのフレームに、さまざまなページを表示します。ダイアログをページのみにモーダルにする方法はありますか? ダイアログを表示しているときに、ページ上のコントロールをクリックすることはできませんが、ページ上にない同じウィンドウのコントロールをクリックすることはできるはずです。
4 に答える
私があなたのメッセージを正しく解釈しているのなら、 ビリー・ホリスが彼のStaffLynxアプリケーションで示しているのと同じように機能するものが必要です。
最近、同様のコントロールを作成しましたが、この種のアイデアはWPFでの実装が比較的簡単であることがわかりました。DialogPresenterというカスタムコントロールを作成しました。カスタムコントロールのコントロールテンプレートに、次のようなマークアップを追加しました。
<ControlTemplate TargetType="{x:Type local=DialogPresenter}">
<Grid>
<ContentControl>
<ContentPresenter />
</ContentControl>
<!-- The Rectangle is what simulates the modality -->
<Rectangle x:Name="Overlay" Visibility="Collapsed" Opacity="0.4" Fill="LightGrey" />
<Grid x:Name="Dialog" Visibility="Collapsed">
<!-- The template for the dialog goes here (borders and such...) -->
<ContentPresenter x:Name="PART_DialogView" />
</Grid>
</Grid>
<ControlTemplate.Triggers>
<!-- Triggers to change the visibility of the PART_DialogView and Overlay -->
</ControlTemplate.Triggers>
</ControlTemplate>
Show(Control view)
また、「PART_DialogView」を検索し、渡されたビューをContent
プロパティに追加するメソッドを追加しました。
DialogPresenter
これにより、次のように使用できます。
<controls:DialogPresenter x:Name="DialogPresenter">
<!-- Normal parent view content here -->
<TextBlock>Hello World</TextBlock>
<Button>Click Me!</Button>
</controls:DialogPresenter>
ボタンのイベントハンドラー(またはバインドされたコマンド)に対して、のShow()メソッドを呼び出すだけDialogPresenter
です。
また、ScaleTransformマークアップをDialogPresenterテンプレートに簡単に追加して、ビデオに表示されるスケーリング効果を取得することもできます。このソリューションには、きちんと整理されたカスタム制御コードと、UIプログラミングチーム向けの非常にシンプルなインターフェイスがあります。
お役に立てれば!
私はgithubにプロジェクトを持っています。これはFrameworkElement
、プライマリ コンテンツの上にモーダル コンテンツを表示できるカスタムです。
コントロールは次のように使用できます。
<c:ModalContentPresenter IsModal="{Binding DialogIsVisible}">
<TabControl Margin="5">
<Button Margin="55"
Padding="10"
Command="{Binding ShowModalContentCommand}">
This is the primary Content
</Button>
</TabItem>
</TabControl>
<c:ModalContentPresenter.ModalContent>
<Button Margin="75"
Padding="50"
Command="{Binding HideModalContentCommand}">
This is the modal content
</Button>
</c:ModalContentPresenter.ModalContent>
</c:ModalContentPresenter>
特徴:
- 任意のコンテンツを表示します。
- モーダル コンテンツが表示されている間、プライマリ コンテンツを無効にしません。
- モーダル コンテンツが表示されている間、プライマリ コンテンツへのマウスとキーボードのアクセスを無効にします。
- アプリケーション全体ではなく、カバーしているコンテンツに対してのみモーダルです。
- プロパティにバインドすることで、MVVM に適した方法で使用でき
IsModal
ます。
ネストされたメッセージ ポンプを使用してモーダル コントロールを作成しない理由
http://deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/
ここでモーダル ダイアログを探しているわけではありません。「ページ」コントロールを無効にし、ダイアログを表示し、ダイアログが閉じたときに再度有効にする関数が必要です。
モーダル ダイアログの意味を理解しているかどうかはよくわかりませんが、