WPF-программа имеет странное поведение при уменьшении размера изображения - PullRequest
0 голосов
/ 02 марта 2019

У меня есть TreeView в программе WPF, которая имеет изображение на каждом TreeViewItem.Когда я устанавливаю размер этого изображения 21x21 или больше, он отображается нормально - я вижу все изображение.Но если я установлю его на 20x20 или меньше, он ломается - он берет только самые правые пиксели и растягивает их до ширины, которую я ввожу, поэтому я не могу видеть все изображение.

Я создал новый проект дляпроверить, и я заметил, что при увеличении / уменьшении окна дизайнера изображение переходит от хорошего к сломанному.

Это, кажется, странная ошибка, связанная с DPI или масштабированием.

Вот исходное изображение, которое я добавил в TreeView: https://ibb.co/p3tHFJM

Вот скриншот, показывающий проблему.Верхнее изображение - 20х20, а нижнее - 21х21.https://ibb.co/7vJjVS5

Вот демонстрационный код, который вы можете попробовать на своем компьютере.Возможно, вам придется установить размеры меньше, например 5x5, чтобы увидеть проблему.Также пытается увеличить / уменьшить масштаб в конструкторе.

<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfBug"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>

        <TreeView Grid.Row="0" Grid.Column="0" Background="Pink" >
            <TreeView.Resources>
                <BitmapImage x:Key="PlayIcon" UriSource="/Resources/play.png" />
            </TreeView.Resources>
            <TreeViewItem Header="These subitems work correctly">
                <Button>
                    <Image Source="{StaticResource PlayIcon}" Width="25" Height="25" />
                </Button>
                <TextBlock Text="This image is size 25" />
            </TreeViewItem>
            <TreeViewItem Header="These subitems have broken images">
                <Button >
                    <Image Source="{StaticResource PlayIcon}" Width="11" Height="11" />
                </Button>
                <TextBlock Text="This image is size 11" />
            </TreeViewItem>
        </TreeView>

    </Grid>
</Window>
...