0

我喜欢Prism 5.0 Interactivity的工作方式,但它可以在它创建的内部打开UserControls等等。因此,由于它不能将 a放置在另一个内部,因此您不能为它传递具有根元素的视图。PanelsWindowWindowWindowWindow

问题是,当它把我UserControl放在Window它创建的里面时,Window没有一个MinWidthMinHeight或一个ResizeMode="NoResize"选项可供选择,因此,用户界面变得很糟糕。

有什么方法可以控制Window's 的属性,以便我可以根据需要对其进行自定义?

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


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

为了Window在 Prism 中打开新视图,您必须将其添加到当前视图(将调用在其中创建新视图的视图WindowViewModel

    <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从 a更改UserControl为 a Window,您将收到以下异常:

窗口异常内的窗口

因为基本上 Prism在创建一个新的和一个新的时会尝试将 aWindow放在 a 中,并尝试将一个放在另一个中...并且假设始终是根,但在这种情况下将被放置为 a 的子项新的。WindowWindowItemSelectionViewWindowsWindow ItemSelectionViewWindow

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


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

 private void OnLoaded(object sender, System.Windows.RoutedEventArgs e)
 {
    Window parentWindow = Window.GetWindow(this);
    if (parentWindow != null && parentWindow.Content == this)
    {
         parentWindow.ResizeMode = ResizeMode.NoResize;
         parentWindow.SizeToContent = SizeToContent.Height;
         parentWindow.MinHeight = this.MinHeight;                
         parentWindow.MinWidth = this.MinWidth;                
    }
}
4

1 回答 1

0

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

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

<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>
于 2015-06-19T20:36:27.903 回答