我试过使用XAML,但那不是C#,但它的代码太多了,我想可以简化。这不是按钮背景的颜色,而是当你悬停在它上面时它显示的颜色。默认情况下它是浅蓝色
oipij1gg1#
若要更改处于MouseOver状态的Button的颜色,与该状态关联的SolidColorBrush资源必须是DynamicResource。如果将Brush模板化为StaticResource,则在代码中更改资源的值将不会更新视图上的Brush(颜色)。从Microsoft docs Button ControlTemplate:https://learn.microsoft.com/en-us/dotnet/desktop/wpf/controls/button-styles-and-templates?view=netframeworkdesktop-4.8将MouseOver状态的Brush引用为StaticResoruce。
<VisualState x:Name="MouseOver"> <Storyboard> <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background). (GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="Border"> <EasingColorKeyFrame KeyTime="0" Value="{StaticResource ControlMouseOverColor}" /> </ColorAnimationUsingKeyFrames> </Storyboard> </VisualState>
此外,Buttons MouseOver状态的后备资源可能在多个位置使用,更新它也可能会更改这些位置的显示。您可以从上面的链接复制Button Style,并将MouseOver状态中指定的颜色更改为您自己的颜色。为Style指定一个键。例如:
<Style TargetType="Button" Key="MyButton"> <Setter Property="SnapsToDevicePixels" Value="true" /> <Setter Property="OverridesDefaultStyle" Value="true" /> <Setter Property="FocusVisualStyle" .... <VisualState x:Name="MouseOver"> <Storyboard> <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background). (GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="Border"> <EasingColorKeyFrame KeyTime="0" Value="Red" /> </ColorAnimationUsingKeyFrames> ....
然后将此Style作为要更改的Button上的StaticResource引用。
<Button Style="{StaticResource MyButton}" />
1条答案
按热度按时间oipij1gg1#
若要更改处于MouseOver状态的Button的颜色,与该状态关联的SolidColorBrush资源必须是DynamicResource。如果将Brush模板化为StaticResource,则在代码中更改资源的值将不会更新视图上的Brush(颜色)。从Microsoft docs Button ControlTemplate:https://learn.microsoft.com/en-us/dotnet/desktop/wpf/controls/button-styles-and-templates?view=netframeworkdesktop-4.8将MouseOver状态的Brush引用为StaticResoruce。
此外,Buttons MouseOver状态的后备资源可能在多个位置使用,更新它也可能会更改这些位置的显示。
您可以从上面的链接复制Button Style,并将MouseOver状态中指定的颜色更改为您自己的颜色。为Style指定一个键。例如:
然后将此Style作为要更改的Button上的StaticResource引用。