Отрегулируйте размер окна WPF на основе DPI - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над приложением WPF с размером окна 1200 * 932, включая строку заголовка.

Хорошо отображается на мониторе моего компьютера (2560 * 1440 с масштабированием 125%), фактический размер 1500* 1165.

Однако, когда я запускаю его на своем ноутбуке (2736 * 1824 с 200% масштабированием), фактический размер составляет 2400 * 1864, что слишком велико.

Как обращатьсяэтот?Я имею в виду динамически?

Редактировать:

Исходный вопрос может быть неясным.Извините за это.

То, что я хочу сделать, это то, как работает приложение UWP.На моем рабочем столе размер окна приложения UWP по умолчанию составляет 1500 * 1165 (возможно, 1200 * 932 * 125%);На ноутбуке размер окна составляет 2048 * 1600 (возможно, 1024 * 800 * 200%).

Эта функция предоставляется UWP по умолчанию?Может ли WPF сделать это?Может быть, программно, я думаю.

Почему бы не UWP: я считаю, что UWP работает внутри своего рода песочницы.На сеть наложены некоторые ограничения, что важно для моего приложения.

Ответы [ 3 ]

0 голосов
/ 05 марта 2019

То, что вы неправильно понимаете, это единица, с которой вы работаете.при установке ширины контейнера вы не скажете ему, например, чтобы его ширина составляла ровно 500 пикселей.Это имеет смысл, когда вы начинаете думать о шрифтах.Fontsize 25 был бы хорош для вашего дисплея, но для дисплея 4K он мог бы быть минималистичным маленьким и нечитаемым.Чтобы обойти это стандартное устройство, для которого вы устанавливаете свой контейнер, составляет 1/96 дюйма.Вы можете изменить его, как показано ниже в цитате из:

https://docs.microsoft.com/de-de/dotnet/api/system.windows.frameworkelement.width?view=netframework-4.7.2

qualDouble Двойное значение, как описано выше, за которым следует одна из следующих строк объявления модуля: px,in, cm, pt.

px (по умолчанию) - независимые от устройства единицы (1/96 дюйма на единицу)

в дюймах;1 дюйм == 96px

см - это сантиметры;1см == (96 / 2.54) px

pt - точки;1pt == (96/72) px

Авто Включает режим автоматического изменения размера.См. Примечания.

0 голосов
/ 05 марта 2019

Наконец-то я знаю, чего хочу.И описание в вопросе не ясно: (

Я хочу, чтобы размер приложения (размер окна, а также размер содержимого) корректировался в соответствии с разрешением экрана и масштабированием так, чтобы мое приложение занимало (почти)Один и тот же раздел экрана в первый раз во время обеда. Никогда не становитесь слишком большими и не выходите за пределы экрана и не становитесь слишком маленькими, чтобы их было видно.1008 *

И добавьте это к самому внешнему Grid

        <Grid.LayoutTransform>
            <ScaleTransform CenterX="0" 
                            CenterY="0" 
                            ScaleX="{Binding ElementName=myMainWindow, Path=ScaleValue}" 
                            ScaleY="{Binding ElementName=myXMainWindow, Path=ScaleValue}"/>
        </Grid.LayoutTransform>

Код позади

    public double ScaleValue
    {
        get
        {
            return ReSizeWidth / 1200;
            // 1200 is the design height
        }
    }

Хотя это работает, но я думаю, что это может вызвать некоторые плохие эффекты, такие как размытиеили псевдонимы. Я думаю, что должна быть встроенная функция или что-то для этого.

0 голосов
/ 05 марта 2019

Если вы хотите изменить размер окна вашего приложения, просто воспользуйтесь этой ссылкой: Размер окна WPF и wpf-windows-review # window-size

<Window 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
SizeToContent="WidthAndHeight">

но я думаю, что вы ищете интеграцию DPi в приложение WPF. Чтобы получить дополнительную информацию, обратитесь к нему по ссылке

https://docs.microsoft.com/en-us/windows/desktop/hidpi/declaring-managed-apps-dpi-aware

tecniques-scaling-МОФ-приложение

...