在Windows Phone 8.1中按下时更改按钮的外观

时间:2014-12-29 07:03:47

标签: windows-phone-8.1 imagebutton

我有一个Windows Phone 8.1 RT应用程序。

我的页面上有一个图像按钮。

我想要的是当我按下此按钮时,我将边框设置为黄色或/并更改图像。

所以,在我看来,我只需要捕获keydown和keup事件。

在keydown活动中,我设置了'影响'

在keyup中我恢复到默认状态。

唯一的问题是,当我为此运行/测试时,这些事件永远不会被击中。

这是我的标记:

        <Button Name="btn0" Width="75" Height="75">
            <Button.Background >
                <ImageBrush ImageSource="ms-appx:///Images/0.png" Stretch="Uniform"/>
            </Button.Background>
        </Button>

这是我的事件代码:

//在我的页面的initialize事件中设置:

      btn0.KeyDown += btn0_KeyDown;
      btn0.KeyUp += btn0_KeyUp;

//在我的页面的initialize事件中设置:

    void btn0_KeyUp(object sender, KeyRoutedEventArgs e)
    {
        lblTitle.Text = "btn0_KeyUp";  //never hit
    }

    void btn0_KeyDown(object sender, KeyRoutedEventArgs e)
    {
        lblTitle.Text = "btn0_KeyDown";  //never hit
    }

我需要做什么?

由于

1 个答案:

答案 0 :(得分:2)

KeyDown和KeyUp是键盘事件。如果用户将键盘焦点设置为按钮和类型,它们应该被击中。这可能不是你想要的。

要在按下按钮时更改按钮的外观,您将要编辑按钮的样式并修改其视觉状态。选择您的按钮,右键单击,然后选择编辑模板...以创建默认模板的副本,然后转到默认模板并编辑该部分以进行所需的更改。

要将边框更改为黄色到默认的按下处理,请将状态更改为以下内容:

<VisualState x:Name="Pressed">
    <Storyboard>
        <PointerDownThemeAnimation Storyboard.TargetName="Grid"/>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPressedForegroundThemeBrush}"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="Border">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPressedBackgroundThemeBrush}"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush)" Storyboard.TargetName="Border">
            <DiscreteObjectKeyFrame KeyTime="0">
                <DiscreteObjectKeyFrame.Value>
                    <SolidColorBrush Color="Yellow"/>
                </DiscreteObjectKeyFrame.Value>
            </DiscreteObjectKeyFrame>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

有关Visual States的演练,请参阅MSDN的Specifying the visual behavior of a control(在复选框上,但概念相同)

最简单的方法是使用可视状态记录器编辑Blend中的视觉状态。编辑模板,选择“状态”选项卡,然后设置要为该状态应用的属性。