我发现了一个我很满意的解决方案。 首先我在LayoutRoot网格的'SearchInProgress'和'Normal'上定义了两个VSM状态。
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="Standard">
<VisualState x:Name="SearchInProgress">
<Storyboard>
<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="SearchButton" Storyboard.TargetProperty="(Control.IsEnabled)">
<DiscreteObjectKeyFrame KeyTime="00:00:00">
<DiscreteObjectKeyFrame.Value>
<system:Boolean>False</system:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
<ObjectAnimationUsingKeyFrames BeginTime="00:00:00" Duration="00:00:00.0010000" Storyboard.TargetName="SearchCancelButton" Storyboard.TargetProperty="(Control.IsEnabled)">
<DiscreteObjectKeyFrame KeyTime="00:00:00">
<DiscreteObjectKeyFrame.Value>
<system:Boolean>True</system:Boolean>
</DiscreteObjectKeyFrame.Value>
</DiscreteObjectKeyFrame>
</ObjectAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="Normal"/>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
相当简单,我会适应他们,但它的工作原理。
从here这让我绑定到DataContext的(视图模型)一个属性,因此两种状态之间切换,我用的是DataStateBehavior状态之间切换:我觉得我现在能
<interactivity:Interaction.Behaviors>
<exprsamples:DataStateBehavior Binding="{Binding Path=SearchIsInProgress, Mode=TwoWay}"
Value="True"
TrueState="SearchInProgress"
FalseState="Normal">
</exprsamples:DataStateBehavior>
</interactivity:Interaction.Behaviors>
使用VSM的强大功能,Blend中的可设计性以及“DataTrigger”机制的灵活性以达到全面效果。
我认为这工作,但如果我想在同一时间在GUI中改变一些事情,这可能得到有点凌乱。 – 2010-02-23 08:52:17