我正在为C#和xaml (visual studio 2013)上的wp 8.1应用程序工作。
我有一个基本页面,其中包含作为button的矩形。 这些矩形导致其他页面。 我的愿望是,触摸这些透明的矩形将改变颜色为蓝色。
<Rectangle Fill="#FFD69F50" HorizontalAlignment="Left" Height="48" Margin="58,94,0" stroke="Black" VerticalAlignment="Top" Width="73" Tap="h1_Tapped"/>
我已经研究,但找不到修复。 我的要求可能吗?
如何在Windows Phone 7.1中打开文件?
如何在基于相机的应用程序的Windows Phone 8.1 WinRT上应用颜色效果?
简单的方法是使用Button而不是Rectangle。 这听起来像你的使用本质上是按钮,所以你最好使用已经实现了Button语义的Button控件。 否则,你需要添加大量的代码来实现你自己。
特别是对于你的问题,按钮通过移动和改变它们的颜色来处理Pointerpressed事件。 默认情况下,这是用户的主题颜色,但您可以编辑按钮的模板来选择您自己的颜色,并删除轮班。
为此,请右键单击设计器中的按钮(我喜欢在“文档大纲”窗格中执行此操作,因为在此处很容易找到正确的控件),然后选择“编辑模板”。从上下文菜单中选择一个复制… 。 这将创建当前模板的副本,以便您可以对其进行编辑。
查看复制的模板,找到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>
默认情况下,这会做三件事情:
应用PointerDownThemeAnimation来移动按钮
将背景颜色更改为ButtonpressedBackgroundThemeBrush
将前景色更改为ButtonpressedForegroundThemeBrush
你可以编辑这些来做任何你想做的事情,包括删除动画和改变目标的颜色。 即使您定义了自己的颜色,并且在高对比度模式下让自定义颜色回落到默认值,我仍建议将颜色作为主题资源。
要使按钮成为图片中的小方块,而不是Xaml中较宽的矩形,您可能需要设置按钮的MinWidth属性以及Width属性。
如果你真的想坚持使用矩形而不是按钮,那么你需要编写自己的代码来跟踪Pointerpressed和PointerReleased事件。 在Pointerpressed捕获指针并设置新的颜色,并在PointerReleased上反转这两者。
private void rectControl_Pointerpressed( object sender,PointerRoutedEventArgs e ) { rectControl.Fill = new SolidColorBrush(Colors.Blue); } private void rectControl_PointerReleased( object sender,PointerRoutedEventArgs e ) { rectControl.Fill = new SolidColorBrush(Colors.White); }
或者在viewmodel中定义一个属性,然后将矩形的Fill属性与viewmodel中定义的属性绑定。
private SolidColorBrush rectangleFill; public SolidColorBrush RectangleFill { get{ return rectangleFill;} set{ rectangleFill=value; NotifyPropertyChanged("RectangleFill"); } }
// Xaml代码:
<Rectangle Fill={Binding RectangleFill}>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。