我正在构建一个具有两种视觉状态的图片查看器。
A) 应用程序基础状态(没有激活的视觉状态)
1)“基础”状态(视觉状态,空故事板)
2)所有图像的“网格”(将图像缩放到四分之一大小的视觉状态)
我想用手势在视觉状态之间切换。目前捏合图像可以做到这一点。当我捏(OnPinchDelta)时,我还希望捏手势来缩放图像。这仅适用于 A) 没有激活的视觉状态。一旦我启动视觉状态 1) 或 2) 捏不再起作用。它仍然会启动视觉状态更改,但不会在捏合时缩放图像。
当我的视觉状态处于活动状态时如何修改图像比例,或者如何退出任何活动的视觉状态以不运行任何视觉状态/故事板(我认为后者是不可能的)?
捏合时不再缩放图像的原因是因为它与视觉状态有某种冲突。在应用程序启动时,一切正常,但一旦视觉状态被激活,它就不再工作了。如果在应用程序启动中我将视觉状态设置为 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");
}
}
}
}
结束。更改视觉状态适用于捏合。实际上,仅在没有视觉状态处于活动状态时才在捏合时缩放图片。如何在视觉状态处于活动状态时缩放项目?