c# - 在 Windows Phone 8.1 上触摸时如何更改矩形颜色

标签 c# windows xaml visual-studio-2013 windows-phone-8.1

我正在为 wp 8.1C#xaml (visual studio 2013) 上开发一个应用程序。

我有一个基本页面,其中包含用作按钮的矩形。这些矩形通向其他页面。我的愿望是触摸这些透明矩形会将颜色更改为蓝色。

<Rectangle  Fill="#FFD69F50" HorizontalAlignment="Left" Height="48" Margin="58,94,0,0" Stroke="Black" VerticalAlignment="Top" Width="73" Tap="h1_Tapped"/>

我已研究但找不到修复方法。我的要求可行吗?

这是一个示例图片。

enter image description here

最佳答案

最简单的方法是使用按钮而不是矩形。听起来您的使用本质上是按钮式的,因此您最好使用已经实现按钮语义的按钮控件。否则,您将需要添加大量代码来自行实现。

具体针对您的问题,按钮通过移动和更改颜色来处理 PointerPressed 事件。默认情况下,这是用户的主题颜色,但您可以编辑按钮的模板以选择您自己的颜色并移除偏移。

为此,右键单击设计器中的按钮(我喜欢在文档大纲 Pane 中执行此操作,因为在那里很容易找到正确的控件),然后选择编辑模板。编辑副本...上下文菜单。这将创建当前模板的副本,以便您对其进行编辑。

查看复制的模板并找到 VisualState x:Name="Pressed"部分。这控制按钮被按下时的外观。

<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>
    </Storyboard>
</VisualState>

默认情况下这会做三件事:

  1. 应用 PointerDownThemeAnimation 移动按钮
  2. 将背景颜色更改为 ButtonPressedBackgroundThemeBrush
  3. 将前景色更改为 ButtonPressedForegroundThemeBrush

您可以编辑这些以执行任何您喜欢的操作,包括删除动画和更改目标颜色。我建议将颜色保留为主题资源,即使您定义了自己的颜色并让自定义颜色在高对比度模式下回退到默认值。

要使按钮成为图片中的小方 block ,而不是 Xaml 中的较宽的矩形,您可能需要设置按钮的 MinWidth 属性及其 Width 属性。

如果您真的想坚持使用矩形而不是按钮,那么您需要编写自己的代码来跟踪 PointerPressed 和 PointerReleased 事件。在 PointerPressed 上捕获指针并设置新颜色,在 PointerReleased 上反转这两者。

关于c# - 在 Windows Phone 8.1 上触摸时如何更改矩形颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29240682/

相关文章:

c# - 使用可变数量的功能

c# - WPF:如何使用 MVVM 将命令绑定(bind)到 ListBoxItem?

c# - BuildSiteMap() 方法如何工作?

c# - 无法调试 Windows 服务

wpf - 根据 bool 值更改边框颜色

c# - 访问 ControlTemplate 中的控件

c++ - OpenGL(在 Qt 中)- 旋转问题

windows - 无法从网络 "0xc0000006"启动应用程序

wpf - 如何在 Expression Blend 中显示带有设计时源的图像

c# - BindingExpression 路径错误 : property not found