c# - 我可以动态调整在 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>
解决方案
最简单的方法是在视图模型中公开Width
和Height
属性并绑定到它们。缺点是宽度和高度纯粹是与视图相关的,不应在纯 MVVM 的视图模型中访问。
我想根据用户的屏幕分辨率调整对话框的大小。
如果大小调整与用户的屏幕分辨率有关,则应考虑为自定义对话框窗口或对话框用户控件创建附加行为。通过这种方式,您可以将屏幕分辨率调整的逻辑封装在一个可重用的组件中,该组件位于 XAML 中并保持视图和视图模型关注点的分离。此外,您将可以访问相关的窗口或行为中的用户控件,这使得在不违反 MVVM 原则的情况下更容易处理更复杂的场景。
推荐阅读
- javascript - 访问 JS if/else 的多个数组元素
- vb.net - 如何在不终止对齐的情况下禁用爱普生打印机的粗体?
- wpf - WPF 按钮样式
- c++ - 在现有缓冲区上放置新的
- android - 未找到 Android Google Maven 存储库
- java - Spotify API for Android - 从分页对象中检索 JSON 项目
- javascript - 动画引导卡替换消失的引导卡
- mongodb - Apache nifi - 如何实现“如果在 GetMongo 处理器中找不到记录则继续”
- dns - 如何获取基于不同 DNS 的自定义登录页面?
- apache-spark - 使用 spark sql 将字符串转换为 spark 数据框中的日期