1

VisualStateManager既存のコントロールの視覚的な構造 (外観) を変更せずに視覚的な動作を動的に変更する方法。

と関連付けられたのリストを生成するためにDataTemplate定義されているシナリオがあります。ItemsControlCheckBoxesTextBoxes

XAML:

<DataTemplate>
  <Grid>
    <Grid.ColumnDefinitions>
      <ColumnDefinition Width="0.2*" />
      <ColumnDefinition Width="0.8*" />
    </Grid.ColumnDefinitions>                        
    <CheckBox Grid.Column="0" x:Name="chkBox" />
    <TextBox Grid.Column="1" x:Name="txtBox" />
  </Grid>
</DataTemplate>

TextBoxes最初は関連を非表示にしたかったのCheckBoxですが、後でChecked関連TextBoxが表示されるようになりました。だから私は書いVisualStateManagerたが、それをどのように使用したり、目的の動作を達成したりすることができるか正確な考えはありません。

VisualStateManager:

<vsm:VisualStateManager.VisualStateGroups>
  <vsm:VisualStateGroup x:Name="CheckStates">
    <vsm:VisualState x:Name="Checked">
      <Storyboard>
        <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="txtBox" Storyboard.TargetProperty="Visibility">
          <DiscreteObjectKeyFrame KeyTime="0">
            <DiscreteObjectKeyFrame.Value>
              <vsm:Visibility>Collapsed</vsm:Visibility>
            </DiscreteObjectKeyFrame.Value>
          </DiscreteObjectKeyFrame>
         </ObjectAnimationUsingKeyFrames>
      </Storyboard>
      </vsm:VisualState>
      <vsm:VisualState x:Name="Unchecked">
        <Storyboard>
          <ObjectAnimationUsingKeyFrames Duration="0" Storyboard.TargetName="txtBox" Storyboard.TargetProperty="Visibility">
          <DiscreteObjectKeyFrame KeyTime="0">
            <DiscreteObjectKeyFrame.Value>
              <vsm:Visibility>Visible</vsm:Visibility>
            </DiscreteObjectKeyFrame.Value>
          </DiscreteObjectKeyFrame>
        </ObjectAnimationUsingKeyFrames>
      </Storyboard>
    </vsm:VisualState>
  </vsm:VisualStateGroup>
</vsm:VisualStateManager.VisualStateGroups>
4

1 に答える 1

2

Visual States で別のコントロールのプロパティをターゲットにできるかどうかはわかりません。可能かもしれませんが、できるかどうかはわかりません。

インタラクティブ機能を試してみましたか?

これを機能させるには、 System.Windows.Interactivity DLLへの参照が必要です(どこにあるかはわかりません。Microsoft Expression Blend/Studio に付属している可能性があります)。これらもインポートする必要があります。

xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"             
xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"

そして、このコードはテキストボックスを表示するために機能するはずです:

<CheckBox Grid.Column="0" x:Name="chkBox">
  <i:Interaction.Triggers>
    <i:EventTrigger EventName="Checked">
       <ei:ChangePropertyAction TargetObject="{Binding ElementName=txtBox}" PropertyName="Visibility" Value="Visible"/>
   </i:EventTrigger>
 </i:Interaction.Triggers>
</Checkbox>

元に戻すには:

<i:EventTrigger EventName="UnChecked">
   <ei:ChangePropertyAction TargetObject="{Binding ElementName=txtBox}" PropertyName="Visibility" Value="Collapsed"/>
</i:EventTrigger>

両方のトリガーは、チェックボックス < チェックボックス > HERE < /チェックボックス > 内にある必要があります。このコードはテストされていないため、正確ではない可能性があります。うまくいかない場合は、ChangePropertyAction を検索してください。これよりも優れた例が見つかります。これがアイテム コントロール内でどのように反応するかはわかりませんが、うまくいくと思います。

于 2012-02-13T17:42:12.847 に答える