Почему мой стиль WPF для CornerRadius не применяется в Windows 7? - PullRequest
0 голосов
/ 18 октября 2019

Я создал простое приложение WPF, пока отвечал на вопрос SO , мое решение работает на моей машине с Windows 10, но когда я запускаю приложение на своем ноутбуке с Windows 7, стиль не применяется. Я полагаю, что это как-то связано с настройкой стиля Window, а не с моим стилем. Как я могу заставить его использовать вместо нее мой?

Я использую один и тот же .exe на обеих машинах.

<Window.Resources>
    <Style x:Key="CircleButton" TargetType="Button">
        <Style.Resources>
            <Style TargetType="{x:Type Border}">
                <Setter Property="CornerRadius" Value="1000"/>
            </Style>
        </Style.Resources>
    </Style>
</Window.Resources>

<StackPanel>
    <Button Width="50" Height="50" Margin="10" Style="{StaticResource CircleButton}"/>
    <Button Width="50" Height="50" Margin="10" Style="{StaticResource CircleButton}"/>
    <Button Width="50" Height="50" Margin="10" Style="{StaticResource CircleButton}"/>
</StackPanel>

Windows 10 под управлением .NET 4.8 (нацеливание на приложения 4.6.2)
Screenshot of three circles produced by the example code in Windows 10 running .NET 4.8 (App targeting 4.6.2)
Windows 7 под управлением .NET 4.7.2 (нацеливание на приложения 4.6.2)
Screenshot of three circles produced by the example code in Windows 7 running .NET 4.7.2 (App targeting 4.6.2)

1 Ответ

1 голос
/ 18 октября 2019

Стиль по умолчанию в Windows 7, определенный в PresentationFramework.Aero.dll, использует элемент ButtonChrome вместо элемента Border, поэтому добавление неявного стиля Border не имеет никакого эффекта.

Если выЕсли вы хотите применить стиль Windows 10 в Windows 7, вы можете скопировать весь ControlTemplate, определенный в PresentationFramework.Aero2.dll в Windows 8 и более поздних версиях, и установить свойство Template в вашем Style:

<Style x:Key="CircleButton" TargetType="Button">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="Button">
                ...
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Resources>
        <Style TargetType="{x:Type Border}">
            <Setter Property="CornerRadius" Value="1000"/>
        </Style>
    </Style.Resources>
</Style>

Вы можете извлечь шаблон по умолчанию, щелкнув правой кнопкой мыши элемент Button в режиме разработки в Visual Studio в Windows 10 и выбрав Редактировать шаблон-> Редактировать копию.

...