gpt4 book ai didi

c# - 无法覆盖 WPF 中 app.xaml 的按钮样式

转载 作者:太空宇宙 更新时间:2023-11-03 19:39:11 26 4
gpt4 key购买 nike

我遇到了一个非常奇怪的问题,我找不到解决办法。我尝试了几乎所有可能的方法(甚至删除并重新创建解决方案)来解决这个问题。

问题

我正在尝试覆盖 WPF 应用程序中的默认控件样式。我在 App.xaml 中定义了所有资源和样式。问题是,按钮前景色没有得到覆盖运行时。令人惊讶的是,它在 VS 设计器中显示覆盖颜色(白色),但当我运行应用程序时,它变成黑色(可能是默认设置)。

应用中没有其他代码可以更改按钮样式。

附加信息:按钮位于 Usercontrol 中并加载到 MainWindow 的 ContentControl 上。

<SolidColorBrush x:Key="WhiteBrush" Color="#FFFFFF"/>
<SolidColorBrush x:Key="BlackBrush" Color="#000000"/>
<SolidColorBrush x:Key="ActiveBrush" Color="#3A71C5"/>
<SolidColorBrush x:Key="HoverBrush" Color="#0071C5"/>
<SolidColorBrush x:Key="PressBrush" Color="#3A8BF4"/>
<SolidColorBrush x:Key="DefaultBrush" Color="#0071F9"/>
<SolidColorBrush x:Key="DisabledBrush" Color="#F4F4F4"/>


<Style TargetType="{x:Type Button}">
<Setter Property="Background" Value="{StaticResource ActiveBrush}"/>
<Setter Property="Foreground" Value="{StaticResource WhiteBrush}"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Border Background="{TemplateBinding Background}" BorderBrush="Transparent" BorderThickness="0">
<ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="{StaticResource HoverBrush}"/>
</Trigger>
<Trigger Property="IsPressed" Value="True">
<Setter Property="Background" Value="{StaticResource PressBrush}"/>
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Background" Value="{StaticResource DisabledBrush}"/>
</Trigger>
</Style.Triggers>

</Style>

VS Designer 中的按钮

enter image description here

应用运行时中的按钮

enter image description here

最佳答案

问题可能是您有一些其他样式应用于按钮的某些嵌套控件(例如 TextBlock)。

我将您的代码段粘贴到示例 WPF 应用程序中,并将 Button 包装在自定义 UserControl 中。我对其进行了测试,并在设计 View 和运行时中正确显示。

然后我在App.xaml中添加了如下样式:

<Style TargetType="{x:Type TextBlock}">
<Setter Property="Foreground" Value="Red"/>
</Style>

按钮显示红色文字。

所以问题可能出在 other 控件的某些其他样式上,它覆盖了 Button 模板的某些部分。


编辑

一个可能的解决方案是在控件本身中显式定义 Button 内容:

<Button>
<TextBlock Foreground="{StaticResource WhiteBrush}">Test</TextBlock>
</Button>

可能有更优雅的方法来做到这一点,但我目前想不出任何其他方法。

关于c# - 无法覆盖 WPF 中 app.xaml 的按钮样式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56354939/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com