gpt4 book ai didi

c# - WPF 按钮后台操作被代码覆盖

转载 作者:行者123 更新时间:2023-11-30 17:59:30 25 4
gpt4 key购买 nike

我有一个按钮,我已经修改了它的模板,因此当单击该按钮并将鼠标悬停时它会显示不同的背景颜色(它变为绿色而不是浅蓝色)。

这本身就很好,但我需要根据某些状态更改背景颜色,因此我需要更改代码中的背景。

我的问题是,当我在代码中更改背景颜色时,它会正确更改,但它不再为单击或鼠标悬停事件更改背景。

我假设我以某种方式覆盖了代码中的背景颜色,所以我在模板中创建的内容被覆盖了。我该如何解决这个问题,以便我可以通过代码更改背景但仍然具有单击和鼠标悬停的操作?

这是我的 XAML 代码:

<Style x:Key="NodeButtonStyle" TargetType="{x:Type Button}">
<Setter Property="FocusVisualStyle" Value="{StaticResource ButtonFocusVisual}"/>
<Setter Property="Background" Value="{StaticResource ButtonNormalBackground}"/>
<Setter Property="BorderBrush" Value="{StaticResource ButtonNormalBorder}"/>
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/>
<Setter Property="VerticalContentAlignment" Value="Center"/>
<Setter Property="Padding" Value="1"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type Button}">
<Microsoft_Windows_Themes:ButtonChrome x:Name="Chrome" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}" RenderDefaulted="{TemplateBinding IsDefaulted}" SnapsToDevicePixels="true" OverridesDefaultStyle="true">
<ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="{TemplateBinding Padding}" RecognizesAccessKey="True" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
</Microsoft_Windows_Themes:ButtonChrome>
<ControlTemplate.Triggers>
<Trigger Property="IsKeyboardFocused" Value="true">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0">
<GradientStop Color="#FFCFF9C4" Offset="0"/>
<GradientStop Color="#FF249505" Offset="1"/>
<GradientStop Color="#FF58D835" Offset="0.5"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
<Trigger Property="IsEnabled" Value="false">
<Setter Property="Foreground" Value="#ADADAD"/>
</Trigger>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0,1" StartPoint="0,0" Opacity="0.5">
<GradientStop Color="#FFCFF9C4" Offset="0"/>
<GradientStop Color="#FF249505" Offset="1"/>
<GradientStop Color="#FF58D835" Offset="0.5"/>
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>

在代码中,我只是做button1.Background = newBrush;

我试图寻找类似的问题,但找不到任何......任何帮助,将不胜感激!我正在使用 blend 4 .net 3.5 和 C#。

最佳答案

我相信您遇到了 DependecyProperty value precedence问题。在代码中设置值会覆盖在您的样式中设置的值。不要直接在后台代码中设置属性,而是尝试更改按钮上的样式。另一种解决方案是将背景绑定(bind)到 DataContext 上的属性并将其设置在那里而不是在您的样式中。

关于c# - WPF 按钮后台操作被代码覆盖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11111961/

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