使用PRISM 4显示模态对话框

时间:2012-03-29 15:34:17

标签: c# .net wpf prism prism-4

我正在使用PRISM和MVVM以及WPF开发.NET 4.0应用程序。

我目前在区域中细分了一个shell,并在其中插入了视图。当用户点击其中一个视图中的按钮时,我希望在所有视图的顶部显示一个自定义的模态对话框,但仍然在同一个shell中。

我查看了StockTrader RI示例及其RegionPopupBehavior的实现。基本上,他们创建了一个依赖属性,允许他们定义具有特定的自定义行为的区域。行为是负责处理相关视图渲染的行为,因此将其显示为弹出窗口。

这种方法的唯一缺点是所有其他视图仍处于活动状态,因此弹出窗口不是模态的。我想这可以通过手动禁用shell中所有不需要的区域来解决,但我不确定这是多么“干净”。

我想知道是否有更好更简单的方法在Prism中显示模态弹出视图?

1 个答案:

答案 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>