gpt4 book ai didi

c# - 根据屏幕分辨率调整 WPF 窗口和内容的大小

转载 作者:IT王子 更新时间:2023-10-29 04:40:00 24 4
gpt4 key购买 nike

我有一个 WPF 应用程序,每个窗口都有多个控件,有些是叠加的等等,我需要的是一种让应用程序根据屏幕分辨率自动调整自身大小的方法。

有什么想法吗?

最佳答案

语法 Height="{Binding SystemParameters.PrimaryScreenHeight}"提供了线索,但并不像这样工作。 SystemParameters.PrimaryScreenHeight 是静态的,因此您应该使用:

  <Window x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tools="clr-namespace:MyApp.Tools"
Height="{x:Static SystemParameters.PrimaryScreenHeight}"
Width="{x:Static SystemParameters.PrimaryScreenWidth}"
Title="{Binding Path=DisplayName}"
WindowStartupLocation="CenterScreen"
Icon="icon.ico"
>

而且它适合整个屏幕。然而,您可能更愿意适应屏幕尺寸的百分比,例如90%,在这种情况下,必须使用绑定(bind)规范中的转换器修改语法:

  <Window x:Class="MyApp.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:tools="clr-namespace:MyApp.Tools"
Height="{Binding Source={x:Static SystemParameters.PrimaryScreenHeight}, Converter={tools:RatioConverter}, ConverterParameter='0.9' }"
Width="{Binding Source={x:Static SystemParameters.PrimaryScreenWidth}, Converter={tools:RatioConverter}, ConverterParameter='0.9' }"
Title="{Binding Path=DisplayName}"
WindowStartupLocation="CenterScreen"
Icon="icon.ico"
>

此处RatioConverter在MyApp.Tools命名空间中声明如下:

namespace MyApp.Tools {

[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());
}

}
}

转换器的定义应继承自 MarkupExtension,以便直接在根元素中使用,而无需事先声明为资源。

关于c# - 根据屏幕分辨率调整 WPF 窗口和内容的大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8121906/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com