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'}"
无论你有什么分辨率,我的视图框中的内容都保持不变并且不会改变大小
我有一个高度和宽度固定的视图,我目前使用的是 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'}"
无论你有什么分辨率,我的视图框中的内容都保持不变并且不会改变大小