2017-07-01 7 views
1

私は、トグルボタンがオンのときに、色、サイズ、有効/無効の変更など、いくつかの基準によって状態が変わるボタンを持っています。我々は状態1と状態2を定義UWP要素の状態を設定する方法は?

if (toggleButton.IsOn) btnName.state = State1; 
else btnName.state = State2; 

(多分XAMLで?):私の目標は、我々はこのような何かを行うことができるように状態をカプセル化することです。

これはUWPで可能ですか?

+0

_ "これはUWPで可能ですか?" - もちろんです。 XAMLベースのAPIはすべて、MVVMスタイルのプログラミングを使用してビジネスロジックとUIを分離することを期待しています。実際にどのような状態になっているかに応じて、ボタンスタイルでトリガーを使用するか、トグルボタンの状態に応じて調整するビューモデルのプロパティを使用する必要があります。あなたの質問がどれほど漠然としているかを考えると、答えは実際には広すぎるだけです。 [mcve]と明確で詳細な説明を使用して、自分が行っていること、試したこと、具体的に何が問題になっているのかを正確に示す必要があります。 –

答えて

2

VisualStateManagerを使用して、コントロールの特定の状態を呼び出すことができます。

VisualStateManager.GoToState(MyToggleSwitch, "On", true); 

をしかし、これをしない - あなたは手動ToggleSwitchOn状態に行かせたい場合たとえば、あなたは書くことができます。これは状態を視覚的にに設定するだけなので、基礎となるIsOnプロパティはまだFalseです。

実際にはIsOn~Trueと設定すると、Onの状態が自動的に適用されます。 ToggleSwitchdefault styleToggleStates視覚的な状態のグループ内で、次のようなStoryboard Sの束とOn状態がありますので、これはです -

<VisualState x:Name="On"> 
    <Storyboard> 
    <DoubleAnimation Storyboard.TargetName="KnobTranslateTransform" 
        Storyboard.TargetProperty="X" 
        To="24" 
        Duration="0" /> 
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobBounds" 
            Storyboard.TargetProperty="Opacity"> 
     <DiscreteObjectKeyFrame KeyTime="0" Value="1" /> 
    </ObjectAnimationUsingKeyFrames> 
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="OuterBorder" 
            Storyboard.TargetProperty="Opacity"> 
     <DiscreteObjectKeyFrame KeyTime="0" Value="0" /> 
    </ObjectAnimationUsingKeyFrames> 
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobOn" 
            Storyboard.TargetProperty="Opacity"> 
     <DiscreteObjectKeyFrame KeyTime="0" Value="1" /> 
    </ObjectAnimationUsingKeyFrames> 
    <ObjectAnimationUsingKeyFrames Storyboard.TargetName="SwitchKnobOff" 
            Storyboard.TargetProperty="Opacity"> 
     <DiscreteObjectKeyFrame KeyTime="0" Value="0" /> 
    </ObjectAnimationUsingKeyFrames> 
    </Storyboard> 
</VisualState> 

これらStoryboard sがIsOnTrueに設定されるたびに開始されます。このトリガーロジックはToggleSwitchのコード内にカプセル化されています。したがって、カスタムコントロールのビジュアル状態を独自に定義する場合は、状態プロパティ(例:IsCheckedIsSelectedIsOnIsEnabled)を対応する状態に手動で接続する必要があります。単にそれらを更新し、正しい状態が適用されることを期待することができます。

関連する問題