棱镜5.0交互调用窗口

时间:2015-06-19 10:09:18

标签: c# wpf prism prism-5

我喜欢Prism 5.0 Interactivity的工作方式,但它只能打开UserControlsPanels,并在其创建的Window内。因此,由于无法将Window置于另一个Window内,因此您无法为以Window为根元素的视图传递视图。

问题是,当我将UserControl放入其创建的Window内时,Window没有MinWidthMinHeight或{{{} 1}}选项被选中,因此,用户界面变得可怕。

有没有办法控制ResizeMode="NoResize"的属性,以便我可以根据需要自定义它?

PS:令我惊讶的是,作为微软这样一家大型重要公司如何能够发布一个缺少类似内容的最佳实践库。

根据要求,这里有一个代码示例:

为了在Prism中的新Window中打开一个视图,你必须将它添加到当前视图中(该视图将调用其中创建的新Window {{ 1}}):

Window

如果您将此ViewModel <prism:InteractionRequestTrigger SourceObject="{Binding ItemSelectionRequest, Mode=OneWay}"> <!-- This PopupWindowAction has a custom view defined. When this action is executed the view will be shown inside a new window --> <!-- Take into account that the view and its view model are created only once and will be reused each time the action is executed --> <prism:PopupWindowAction> <prism:PopupWindowAction.WindowContent> <views:ItemSelectionView /> </prism:PopupWindowAction.WindowContent> </prism:PopupWindowAction> </prism:InteractionRequestTrigger> 更改为ItemSelectionView,您将收到以下异常:

Window inside Window Exception

因为基本上Prism会在创建新UserControl和新Window时尝试将Window置于Window内,并尝试将其中一个置于另一个内。 ..和Window总是被认为是根,但在这种情况下,ItemSelectionView Windows将被放置为新Window的子项。

有关其工作原理的更多信息,请转到我发布的链接。

现在我正在使用后面的代码来调整窗口,我检查这个ItemSelectionView是否是Window的根,只有在这种情况下我才会使用Window设置(这不是理想,但仍然不违反MVVM):

UserControl

1 个答案:

答案 0 :(得分:0)

有一个非常简单的解决方案。

由于PopupWindowAction将包装器窗口创建为Window类的实例,因此您可以将默认样式应用于 app.xaml Window类型>

<Application.Resources>
    <Style TargetType="{x:Type Rectangle}"/>
    <Style TargetType="{x:Type Window}">
        <Setter Property="Width" Value="500"/>
        <Setter Property="ResizeMode" Value="NoResize"/>
        <Setter Property="ShowInTaskbar" Value="False"/>
    </Style>
</Application.Resources>