У меня есть приложение WPF с несколькими элементами управления в каждом окне, некоторые оверлейные и т.д., что мне нужно, это способ автоматического изменения размера приложения в зависимости от разрешения экрана.
Любые идеи?
У меня есть приложение WPF с несколькими элементами управления в каждом окне, некоторые оверлейные и т.д., что мне нужно, это способ автоматического изменения размера приложения в зависимости от разрешения экрана.
Любые идеи?
Просто создайте привязку:
<Window x:Class="YourApplication.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="YourApplication"
Height="{Binding SystemParameters.PrimaryScreenHeight}"
Width="{Binding SystemParameters.PrimaryScreenWidth}">
Синтаксис 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%, и в этом случае синтаксис должен быть изменен с помощью конвертера в спецификации привязки:
<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, чтобы использоваться непосредственно в корневом элементе без прежнего объявления в качестве ресурса.