2012-04-19 11 views
1

私は2つの視覚状態を持つ画像ビューアを構築しています。視覚状態がアクティブなときにオブジェクトを動的にスケーリングする

A)1/4に画像をスケーリングするすべての画像を使用したアプリケーションの基本状態アクティブ(NO visualSTATEの)

1) "ベース" 状態(visualSTATEの、空のストーリーボード)

2) "グリッド"(visualSTATEのサイズ)

私はジェスチャーで視覚的な状態の間で変更したいです。現在画像をピンチするとこれが行われます。私はピンチ(OnPinchDelta)のピンチジェスチャーで画像を拡大縮小したいこれは、A)ビジュアルステートアクティブではない。一度ビジュアル状態を起動すると、1)または2)つまみが機能しなくなります。視覚状態の変更はまだ開始されますが、画像の縮尺は変更されませんピンチング。

ビジュアルステートをアクティブにしている場合、またはビジュアルステート/ストーリーボードを実行していないようにアクティブビジュアルステートを終了するにはどうすればできますか(I think the latter is impossible)?それは何とかvisualSTATEのと競合するため、

つまんながらピンチはもはや画像を拡大縮小する理由です。アプリの起動時にはすべて動作しますが、視覚状態が有効になっても機能しなくなります。アプリの起動時にvisualstateを1に設定すると、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

私はあなたが持つ問題がベース状態を行く試みるが原因だと思います。 ベース状態がコントロールが初期化されるときに使用されるデフォルトの状態ですが、VSM(ビジュアルステートマネージャー)一度あなたがもはやベース状態であり、それに戻って行くことができない別の状態になります。

グリッド州と普通ののようなものが必要です。これらの2つの状態を切り替えます。あなたはWP7状態のデフォルトボタンのスタイルのようなものに行くかどう

また、あなたはそれが普通MousOver、デフォルトのトランジション・グループ内プレス無効状態があることがわかります。ユーザーがボタンを何もしていない(そしてそれが無効になっていない)とき、それはノーマル状態になり、をベースにありません!

+0

私は明らかに実際の基本状態(VSMなし)を持っています。次に、1)GRID状態と2)「BASE」状態。後者を2) "NORMAL"と呼ぶこともできますが、それは名前に関する意味だけです。その状態は空です。問題は、ビジュアル状態を実行するとすぐに、状態の影響を受けるイメージを拡大縮小することができなくなることです。視覚状態が実行されている間、イメージは単純に縮尺されません。視覚状態を終了できないので、ある視覚状態のオブジェクトのスケールをどうにかすることができない限り、縮尺を変えることはできません。 – Hardev

+0

XAML(特にVSMビット)を投稿できますか? – Vitalij

+0

オリジナルの投稿を編集しました。これには簡単な例が含まれています。何らかの理由で完全なXAMLを貼り付けてコピーできませんでしたが、含まれていないのはデフォルトのWPページテンプレートだけです。 – Hardev

関連する問題