【问题标题】:Why is my WPF style for CornerRadius not being applied in Windows 7?为什么我的 CornerRadius 的 WPF 样式未在 Windows 7 中应用?
【发布时间】:2020-02-15 12:36:50
【问题描述】:

我在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>

运行 .NET 4.8 的 Windows 10(应用程序面向 4.6.2)

运行 .NET 4.7.2 的 Windows 7(面向 4.6.2 的应用)

【问题讨论】:

  • 您是否尝试过使用相同的 .NET 版本?另外,&lt;Style TargetType="{x:Type Button}" BasedOn="{StaticResource {x:Type Button}}" x:Key="CircleButton"&gt; 可以帮助解决问题吗?
  • @PavelAnikhouski 我设法找到了一台装有 4.7.2 的 Windows 10 机器,它正确应用了样式,因此确信这不是 .NET 问题,而是 Windows 问题。我也尝试添加 BasedOn 位,但没有任何运气。

标签: .net wpf windows-7 windows-10 wpf-style


【解决方案1】:

PresentationFramework.Aero.dll 中定义的 Windows 7 上的默认样式使用 ButtonChrome 元素而不是 Border 元素,这就是添加隐式 Border 样式无效的原因。

如果您想在 Windows 7 上应用 Windows 10 样式,您可以在 Windows 8 及更高版本上复制PresentationFramework.Aero2.dll 中定义的整个ControlTemplate,并在Template 中设置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 元素并选择“编辑模板”->“编辑副本”来提取默认模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-26
    • 2011-04-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-06
    • 2010-12-13
    相关资源
    最近更新 更多