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

时间:2018-06-11 19:53:52

标签: wpf xaml resolution screen-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());
    }

}

有没有办法在每个分辨率上修复屏幕尺寸,这样线条,路径,控件都不会跳转?

1 个答案:

答案 0 :(得分:1)

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

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'}"

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