我正在使用PRISM和MVVM以及WPF开发.NET 4.0应用程序。
我目前在区域中细分了一个shell,并在其中插入了视图。当用户点击其中一个视图中的按钮时,我希望在所有视图的顶部显示一个自定义的模态对话框,但仍然在同一个shell中。
我查看了StockTrader RI示例及其RegionPopupBehavior的实现。基本上,他们创建了一个依赖属性,允许他们定义具有特定的自定义行为的区域。行为是负责处理相关视图渲染的行为,因此将其显示为弹出窗口。
这种方法的唯一缺点是所有其他视图仍处于活动状态,因此弹出窗口不是模态的。我想这可以通过手动禁用shell中所有不需要的区域来解决,但我不确定这是多么“干净”。
我想知道是否有更好更简单的方法在Prism中显示模态弹出视图?
答案 0 :(得分:2)
您可能对我在我的博客上发布的自定义PopupUserControl感兴趣。
通常我会这样使用它:
<local:PopupPanel
Content="{Binding PopupContent}"
local:PopupPanel.PopupParent="{Binding ElementName=SomeParentPanel}"
local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}">
<local:PopupPanel.Resources>
<DataTemplate DataType="{x:Type local:SomeViewModel}">
<local:SomeView />
</DataTemplate>
<DataTemplate DataType="{x:Type local:DifferentViewModel}">
<local:DifferentView />
</DataTemplate>
</local:PopupPanel.Resources>
</local:PopupPanel>
虽然您也可以在弹出窗口中编写内容,而不是绑定Content属性
<local:PopupPanel
local:PopupPanel.PopupParent="{Binding ElementName=SomeParentPanel}"
local:PopupPanel.IsPopupVisible="{Binding IsPopupVisible}">
<Border BorderBrush="Blue" BorderThickness="2">
<local:MyUserControl />
</Border>
</local:PopupPanel>