C# 如何在按钮按下和释放之间的一段时间内更改按钮的背景?

C# 如何在按钮按下和释放之间的一段时间内更改按钮的背景?,c#,.net,uwp,C#,.net,Uwp,我想在按下和释放按钮时更改按钮的背景。我在c#通用windows平台上编写代码。我正在尝试以下方法,但失败了 private void pay_LostFocus(object sender, RoutedEventArgs e) { pay.Background = new SolidColorBrush(Windows.UI.Colors.Pink); } private void one_FocusEngaged(Control sender,

我想在按下和释放按钮时更改按钮的背景。我在c#通用windows平台上编写代码。我正在尝试以下方法,但失败了

 private void pay_LostFocus(object sender, RoutedEventArgs e)
    {
        pay.Background = new SolidColorBrush(Windows.UI.Colors.Pink);
    }

    private void one_FocusEngaged(Control sender, FocusEngagedEventArgs args)
    {
        one.Background = new SolidColorBrush(Windows.UI.Colors.White);
    }

您可以使用指针事件来执行此操作,但必须通过
AddHandler
方法手动添加处理程序,因为您还需要能够处理以前处理过的指针事件,以确保UI保持一致

您可以使用以下代码:

MyButton.AddHandler(
  UIElement.PointerEnteredEvent, // The target event
  new PointerEventHandler((s, e) => 
  {
      // Handle your background here
  }), 
  true); // Include previously handled events
以下是您需要使用的事件:
UIElement.PointerEnteredEvent
UIElement.PointerExitedEvent
UIElement.PointerCaptureLostEvent
UIElement.PointerCanceledEvent
UIElement.pointerReledEvent

您需要根据源事件调整按钮的背景,因为其中一些方法是在用户开始按下按钮时触发的,而另一些方法是在释放按钮时触发的

编辑:下面是一个示例,用于在释放按钮时添加处理程序:

foreach (RoutedEvent target in new[] { UIElement.PointerExitedEvent, UIElement.PointerCaptureLostEvent,
                                        UIElement.PointerCanceledEvent, UIElement.PointerReleasedEvent })
{
    MyButton.AddHandler(target, new PointerRoutedEventArgs((s, e) => 
    {
        MyButton.Background = new SolidColorBrush(Colors.Red);
    }), true);
}

用另一个画笔(当按下按钮时)对
指针PressedEvent
执行相同操作,您应该都已设置好。

只需修改按钮的样式,尤其是按下的VisualState。样本:


然后使用它:

<Button Content="Something" Style="{StaticResource MyButtonStyle}" Padding="20" Background="Pink"/>

那么您希望按钮按下时为白色,不按下时为粉色?