xaml 更改分辨率会更改视图的大小

xaml change resolution changes the view's size

我有一个高度和宽度固定的视图,我目前使用的是 4k 显示器。当我 运行 我的应用程序在 1080p 显示器上运行时,它崩溃了。我有一些线和路径设置在一定的边缘,其他控件也是如此。

我已经尝试绑定到屏幕宽度和高度(见下文),但是当更改为其他分辨率时它并没有保持屏幕尺寸固定。我还将 ResizeMode 设置为 NoResize

    Height="{Binding Source={x:Static SystemParameters.PrimaryScreenHeight}, Converter={k1:RatioConverter}, ConverterParameter='0.7'}"
    Width="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={k1:RatioConverter}, ConverterParameter='0.7'}"

这是我从@berhauz 那里得到的转换器

[ValueConversion(typeof(string), typeof(string))]
public class RatioConverter : MarkupExtension, IValueConverter
{
    private static RatioConverter _instance;

    public RatioConverter() { }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    { // do not let the culture default to local to prevent variable outcome re decimal syntax
        double size = System.Convert.ToDouble(value) * System.Convert.ToDouble(parameter, CultureInfo.InvariantCulture);
        return size.ToString("G0", CultureInfo.InvariantCulture);
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    { // read only converter...
        throw new NotImplementedException();
    }

    public override object ProvideValue(IServiceProvider serviceProvider)
    {
        return _instance ?? (_instance = new RatioConverter());
    }

}

有没有办法固定每个分辨率的屏幕尺寸,这样线条、路径、控件就不会跳来跳去?

我发现简单的解决方案是将所有内容都包装在视图框中,并将视图框的高度和宽度绑定到主屏幕

Height="{Binding Source={x:Static SystemParameters.PrimaryScreenHeight}, Converter={k1:RatioConverter}, ConverterParameter='0.7'}"
Width="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={k1:RatioConverter}, ConverterParameter='0.7'}"

无论你有什么分辨率,我的视图框中的内容都保持不变并且不会改变大小