我喜欢Prism 5.0 Interactivity的工作方式,但它可以在它创建的内部打开UserControls
等等。因此,由于它不能将 a放置在另一个内部,因此您不能为它传递具有根元素的视图。Panels
Window
Window
Window
Window
问题是,当它把我UserControl
放在Window
它创建的里面时,Window
没有一个MinWidth
或MinHeight
或一个ResizeMode="NoResize"
选项可供选择,因此,用户界面变得很糟糕。
有什么方法可以控制Window
's 的属性,以便我可以根据需要对其进行自定义?
PS:令我惊讶的是,像微软这样一家重要的大公司如何能够发布一个缺少此类内容的最佳实践库。
根据要求,这里有一个代码示例:
为了Window
在 Prism 中打开新视图,您必须将其添加到当前视图(将调用在其中创建新视图的视图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
从 a更改UserControl
为 a Window
,您将收到以下异常:
因为基本上 Prism在创建一个新的和一个新的时会尝试将 aWindow
放在 a 中,并尝试将一个放在另一个中...并且假设始终是根,但在这种情况下将被放置为 a 的子项新的。Window
Window
ItemSelectionView
Windows
Window
ItemSelectionView
Window
有关其工作原理的更多信息,请转到我发布的链接。
现在我正在使用后面的代码来调整窗口,我检查这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;
}
}