Отключить масштабирование приложения

161
08 августа 2018, 00:10

Подскажите пожалуйста как в c# wpf vs2010 отключить масштабирование окон и всех элементов в зависимости от изменения размера экрана. Т.е. я создаю приложение (окна и элементы окна) при размере экрана 100%, и если у пользователя размер экрана иной, например, 125% - то мое приложение должно отображаться как в оригинале (т.е. как при 100%). Сейчас если я запускаю приложение при 125%, то оно как-будто увеличивается кратно. Ниже привожу пример кода xaml для первого окна:

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Test" Height="209" Width="350" ResizeMode="NoResize" WindowStartupLocation="CenterScreen" Background="#FFE0E0E0" FontFamily="Arial" FontSize="9">
    <Grid Width="350" HorizontalAlignment="Center">
        <Button Style="{StaticResource MyButton1}" Content="Выход" Height="37" HorizontalAlignment="Left" Margin="19,128,0,0" Name="button2" VerticalAlignment="Top" Width="140" FontFamily="Tahoma" FontSize="14" IsTabStop="False" Click="button2_Click" Background="LightGray"></Button>
        <Label Height="35" HorizontalAlignment="Left" Margin="102,14,0,0" Name="label1" VerticalAlignment="Top" Content="Test" VerticalContentAlignment="Center" FontFamily="Tahoma" FontSize="18" Width="120" />
        <Separator Height="5" HorizontalAlignment="Center" Margin="9,93,9,0" Name="separator1" VerticalAlignment="Top" Width="322" />
    </Grid>
</Window>
Answer 1

Добавьте в конструктор окна (после InitializeComponent):

// Узнаем текущий масштаб Windows
var scaleX = VisualTreeHelper.GetDpi(this).DpiScaleX;
var scaleY = VisualTreeHelper.GetDpi(this).DpiScaleY;
// Трансформируем контент окна до масштаба 100%
((UIElement)Content).RenderTransform = new ScaleTransform(1 / scaleX, 1 / scaleY);

Если у вас .NET ниже версии 4.6.2, то этот метод не сработает. Попробуйте так, но имейте ввиду, что это сработает только после того, как окно будет загружено (например, в подписчике на Loaded):

var scaleX = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice.M11;
var scaleY = PresentationSource.FromVisual(this).CompositionTarget.TransformToDevice.M22;
READ ALSO
Стоит ли в данном случае использовать табличные функции вместо LINQ to SQL?

Стоит ли в данном случае использовать табличные функции вместо LINQ to SQL?

В своем проекте часто приходится работать с sql-запросамиНа данный момент я использую LINQ to SQL, чтобы получить необходимые данные из БД, но структура...

151
Передавать в метод поле класса

Передавать в метод поле класса

По мере получения данных, изменяю значение полей у элементов класса(List<'User1>)Возможно ли сделать метод, в который можно было бы передать какое...

159
Помогите реализовать через класс

Помогите реализовать через класс

Коротко говоря пж помогите есть код который кидает информацию в БД знаю как сделать штобы с формы кидало но хотелось ето в классе чтобы не дублировать...

139
Не компилируется проект

Не компилируется проект

Не компилируется проект в MSVS2015 подNET Framework 4

121