我正在构建一个具有两种视觉状态的图片查看器。
A)应用程序基础状态(没有可视状态活动)
1)“基础”状态(visualstate,空故事板)
2)所有图像的“网格”(将图像缩放到四分之一大小的视觉状态)
我想用手势在视觉状态之间切换。捏图像目前就是这样做的。我还希望捏手势在我捏(OnPinchDelta)时缩放图像。这仅适用于A)没有活动的视觉状态。一旦我启动视觉状态1)或2)捏不再起作用。它仍会启动视觉状态更改,但不会缩放图像,而收缩。
如果我将视觉状态设置为活动状态,或者如何退出任何活动的可视状态以使任何视觉状态/故事板无法运行(I think the latter is impossible),如何修改图像比例?
捏合不再缩放图像的原因是因为它与视觉状态有某种冲突。在应用程序启动时一切正常,但一旦视觉状态被激活,它就不再有效。如果在应用程序启动时我将visualstate设置为1)它甚至不会工作一次。
编辑:我建立了一个简化的例子。这是相关的XAML(其余的复制粘贴不起作用,但除此之外它只是带有工具包参考的默认WP页面模板):<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisualStateGroup">
<VisualState x:Name="Normal"/>
<VisualState x:Name="Grid">
<Storyboard>
<DoubleAnimation Duration="0" To="0.3" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleX)" Storyboard.TargetName="image" d:IsOptimized="True"/>
<DoubleAnimation Duration="0" To="0.3" Storyboard.TargetProperty="(UIElement.RenderTransform).(CompositeTransform.ScaleY)" Storyboard.TargetName="image" d:IsOptimized="True"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"/>
<Image x:Name="image" Source="cheetah-picture.jpg" Stretch="Uniform" VerticalAlignment="Top">
<Image.RenderTransform>
<CompositeTransform x:Name="ImageTransformation"/>
</Image.RenderTransform>
<toolkit:GestureService.GestureListener>
<toolkit:GestureListener PinchDelta="OnPinchDelta" PinchCompleted="OnPinchCompleted" />
</toolkit:GestureService.GestureListener>
</Image>
</Grid>
这是.CS
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using Microsoft.Phone.Controls;
namespace Pincher
{
public partial class MainPage : PhoneApplicationPage
{
public MainPage()
{
InitializeComponent();
}
private void OnPinchDelta(object sender, PinchGestureEventArgs e)
{
ImageTransformation.ScaleX = 1 * e.DistanceRatio;
ImageTransformation.ScaleY = ImageTransformation.ScaleX;
}
private void OnPinchCompleted(object sender, PinchGestureEventArgs e)
{
bool squeezing = (e.DistanceRatio < 1) ? true : false;
if (squeezing == true)
{
VisualStateManager.GoToState(this, "Grid", true);
MessageBox.Show("grid");
}
else
{
VisualStateManager.GoToState(this, "Normal", true);
MessageBox.Show("normal");
}
}
}
}
结束。改变视觉状态与捏合有效。实际上,缩放图片时,仅在没有视觉状态处于活动状态时才能进行缩放。如何在视觉状态处于活动状态时缩放项目?
答案 0 :(得分:0)
我认为你遇到的问题是尝试去基础状态。 base 状态是初始化控件时使用的默认状态,但是一旦VSM(可视状态管理器)进入另一个状态,您就不再处于 base 状态,并且可以回去吧。
在您的情况下,您应该具有网格状态和正常之类的内容。并在这两个州之间切换。
此外,如果您在WP7状态下使用默认按钮样式,您会注意到它有正常, MousOver ,按下和已禁用状态。当用户没有对按钮做任何事情(并且没有禁用)时,它会进入正常状态,不进入BASE !