首页 > 解决方案 > 我可以动态调整在 Prism 中使用 IDialogService 打开的对话框的大小吗?

问题描述

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

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

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>

标签: c#prismprism-7

解决方案


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

我想根据用户的屏幕分辨率调整对话框的大小。

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


推荐阅读