【问题标题】:Button not correct colour按钮颜色不正确
【发布时间】:2012-09-04 22:02:21
【问题描述】:

我有一个带有按钮的 WPF 用户控件。我通过Extract Value to Resource 复制了System.Windows.Media.LinearGradientBrush 的标准按钮阴影,以查看资源中的默认设置

然后我复制了资源,但将默认颜色替换为我想要的颜色

    <LinearGradientBrush EndPoint="0,1">
        <GradientStop Color="#FFF3F3F3" Offset="0" />
        <GradientStop Color="#FFEBEBEB" Offset="0.5" />
        <GradientStop Color="#FFDDDDDD" Offset="0.5" />
        <GradientStop Color="#FFCDCDCD" Offset="1" />
    </LinearGradientBrush>

然后我删除了资源,所以我的完整 XAML 看起来像

<UserControl x:Class="Project.Detail"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="30" d:DesignWidth="800" BorderBrush="#FF5380E7" BorderThickness="0,0,0,1" >
    <Grid Height="30" Width="800">
        <Button Height="30" HorizontalAlignment="Left" Margin="254,0,0,0" Name="bOption3" VerticalAlignment="Top" Width="50" Click="bOption_Click" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" FontSize="10" FontStretch="SemiCondensed">
            <Button.Background>
                <LinearGradientBrush EndPoint="0,1">
                    <GradientStop Color="#FFD2DEF9" Offset="0" />
                    <GradientStop Color="#FFC5D4F7" Offset="0.5" />
                    <GradientStop Color="#FFAEC3F4" Offset="0.5" />
                    <GradientStop Color="#FF8FACF0" Offset="1" />
                </LinearGradientBrush>
            </Button.Background>
        </Button>
    </Grid>
</UserControl>

在设计器中,我看到我设置的颜色具有正确的渐变,但是当我构建和运行按钮时,按钮是默认的灰色。

谁能告诉我我做错了什么?

编辑:

我想保留默认按钮样式,除了初始状态背景我想要我自己的颜色。我现在尝试为背景添加特定资源

<UserControl.Resources>
    <LinearGradientBrush x:Key="NewBackground" EndPoint="0,1">
        <GradientStop Color="#FFD2DEF9" Offset="0" />
        <GradientStop Color="#FFC5D4F7" Offset="0.5" />
        <GradientStop Color="#FFAEC3F4" Offset="0.5" />
        <GradientStop Color="#FF8FACF0" Offset="1" />
    </LinearGradientBrush>
</UserControl.Resources>

然后添加

<Button Height="30" HorizontalAlignment="Left" Margin="360,0,0,0"  Background="{StaticResource NewBackground}">

再次在设计器中,我可以看到正在应用的颜色,但是当应用程序运行时,它始终具有默认的灰色。

设计模式下的按钮

应用中的按钮

我现在有几个问题

  1. 有没有一种简单的方法可以只更改默认按钮的 1 个属性而不是创建完整的新样式?

  2. 如果我必须重新创建完整样式,我可以在哪里访问所有默认属性以使其看起来相同?

谢谢

【问题讨论】:

  • 为什么要使用 UserControl?你不能给按钮设置样式吗?
  • 用户控件允许我设置一个自定义布局,这些布局相互堆叠。
  • 我已经试过你的代码,我可以看到颜色一切都是正确的。除了当你按下按钮时它的变化,但那是因为按钮有另一个状态并且正在使用另一个模板。
  • 如果我希望按钮在不同状态下的行为方式相同,除了初始颜色不同 - 我如何找到所有属性来设置它的样式?
  • 您必须覆盖按钮的默认模板。

标签: c# wpf xaml controls


【解决方案1】:
  1. 是的,您可以针对某些属性,这取决于。假设您要更改 FontSize、FontFamily、FontSize、FontStretch 等。WPF 提供了一些附加属性来覆盖它,例如

    &lt;Grid TextElement.FontFamily=""/&gt;&lt;Button TextElement.FontFamily=""/&gt;

  2. 您可以尝试转到 Expression blend 并提取 WPF 控件的默认模板。从那里自定义模板。

更多信息可以找到here

【讨论】:

    猜你喜欢
    • 2020-12-09
    • 1970-01-01
    • 2018-02-05
    • 2018-09-20
    • 2018-07-20
    • 2014-12-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多