我可以在 Prism 中动态调整使用 IDialogService 打开的对话框的大小吗?

Can I dynamically size dialogs that are opened with IDialogService in Prism?

有没有什么方法可以使用 IDialogService 在 Prism 的代码中动态调整对话框的大小?我想根据用户的屏幕分辨率调整对话框的大小。

这是我打开对话框的方式:

public class MainViewModel
{
   // Gets injected in the constructor
   private IDialogService dialogService;

   private void OpenDialog()
   {
      this.dialogService.ShowDialog(
         nameof(MyDialog), 
         new DialogParameters(),
         result => { }); 
   }
}

这是我的对话框在 XAML

中的样子
<UserControl 
   x:Class="MyApplication.MyDialog"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
   xmlns:prism="http://prismlibrary.com/"
   prism:ViewModelLocator.AutoWireViewModel="True"
   mc:Ignorable="d" 
   d:DesignHeight="450" d:DesignWidth="800">

  <!-- various controls -->

</UserControl>

最简单的方法是在视图模型中公开 WidthHeight 属性并绑定到它们。缺点是宽度和高度纯粹与视图相关,不应在纯 MVVM 的视图模型中访问。

I would like to adjust the size of my dialog based on the user's screen resolution.

如果大小调整与用户的屏幕分辨率有关,您应该考虑为自定义对话框 window 或对话框用户控件创建附加的 behavior。通过这种方式,您可以将屏幕分辨率适配逻辑封装在 可重用 组件中,该组件位于 XAML 中并保持视图和视图模型关注点的分离。此外,您将有权访问行为中关联的 window 或用户控件,这使得在不违反 MVVM 原则的情况下更容易处理更复杂的场景。