wpf 我如何改变悬停在按钮的颜色在.net 6.0只使用c#和0 xaml

dfty9e19  于 2022-11-18  发布在  .NET
关注(0)|答案(1)|浏览(174)

我试过使用XAML,但那不是C#,但它的代码太多了,我想可以简化。这不是按钮背景的颜色,而是当你悬停在它上面时它显示的颜色。默认情况下它是浅蓝色

oipij1gg

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}" />

相关问题