为什么我的 CornerRadius WPF 样式没有在 Windows 7 中应用?

Why is my WPF style for CornerRadius not being applied in Windows 7?

我在 answering an SO question 时创建了一个简单的 WPF 应用程序,我的解决方案适用于我的 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 运行ning .NET 4.8(应用程序目标 4.6.2)

Windows 7 运行ning .NET 4.7.2(应用程序目标 4.6.2)

PresentationFramework.Aero.dll 中定义的 Windows 7 上的默认样式使用 ButtonChrome 元素而不是 Border 元素,这就是添加隐式 Border风格没有影响。

如果您想在 Windows 7 上应用 Windows 10 样式,您可以复制 PresentationFramework.Aero2.dll 中定义的整个 ControlTemplate 在 Windows 8 及更高版本并在 Style:

中设置 Template 属性
<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>

您可以通过在 Windows 10 Visual Studio 的设计模式中右键单击 Button 元素并选择编辑模板->编辑副本来提取默认模板。