Разрешение изменения xaml изменяет размер представления

У меня есть представление с фиксированной высотой и шириной, и в настоящее время я использую монитор 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());
    }

}

Есть ли способ исправить размер экрана для каждого разрешения, чтобы линии, пути, элементы управления не прыгали?


person Dnguy025    schedule 11.06.2018    source источник
comment
Вам нужно будет реализовать более гибкий макет, обычно злоупотребляя такими атрибутами, как Margin, Height, Width и т. д., с фиксированными значениями, что даст вам нежелательные результаты макета на разных устройствах. Вместо этого использование таких вещей, как правильно построенные сетки с относительным/процентным размером, будет намного лучше относиться к вам и практически не потребует кода для получения желаемого результата.   -  person Chris W.    schedule 12.06.2018
comment
в дополнение к тому, что предложил Крис, сделайте размер вашего представления SizeToContent=WidthAndHeight   -  person Shivani Katukota    schedule 12.06.2018


Ответы (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'}"

независимо от того, какое у вас разрешение, содержимое внутри моего окна просмотра осталось прежним и не меняет размеры

person Dnguy025    schedule 12.06.2018