我有一个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
}
我需要做什么?
由于
答案 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中的视觉状态。编辑模板,选择“状态”选项卡,然后设置要为该状态应用的属性。