我有一个高度和宽度固定的视图,我目前正在使用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());
}
}
有没有办法在每个分辨率上修复屏幕尺寸,这样线条,路径,控件都不会跳转?
答案 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'}"
无论你有什么分辨率,我的视图框中的内容保持不变,并且不会改变大小