他のコントロールの中でフレームをホストするWPFウィンドウがあります。そのフレームでは、さまざまなページを表示します。ダイアログをページのみにモーダルにする方法はありますか?ダイアログを表示しているときは、ページ上のコントロールをクリックすることはできませんが、ページ上にない同じウィンドウ上のコントロールをクリックすることはできます。
私があなたのメッセージを正しく解釈するのであれば、あなたは Billy Hollisが彼の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>
_
また、「PART_DialogView」を検索するShow(Control view)
メソッドを追加し、渡されたビューをContent
プロパティに追加しました。
これにより、次のようにDialogPresenter
を使用できるようになります。
_<controls:DialogPresenter x:Name="DialogPresenter">
<!-- Normal parent view content here -->
<TextBlock>Hello World</TextBlock>
<Button>Click Me!</Button>
</controls:DialogPresenter>
_
ボタンのイベントハンドラー(またはバインドされたコマンド)に対して、DialogPresenter
のShow()メソッドを呼び出すだけです。
また、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>
特徴:
IsModal
プロパティにバインドすることで、MVVMに適した方法で使用できます。ネストされたメッセージポンプを使用してモーダルコントロールを作成しないのはなぜですか
http://deanchalk.com/wpf-modal-controls-via-dispatcherframe-nested-message-pumps/
ここではモーダルダイアログを探していません。 「ページ」コントロールを無効にし、ダイアログを表示し、ダイアログが閉じたときに再度有効にする関数が必要です。
モーダルダイアログが何を意味するのか理解しているかどうかはわかりませんが?