什么是最好的方式来开始一个动画片时,一定价值的变化?
-
13-09-2019 - |
题
这种情况经常出:
在看,你有一个制定一个模型酒店(支持通过一个举).例如:
<TextBlock Text="{Binding Path=Subtotal}"/>
当财产的变化,需要使用者注意这一事实与一些有创意的动画。我如何可以利用的事实,即视为已经连接到通知,并避免造成许多额外的代码(或至少建立一次,重新使用)。数据,触发可能是最佳选择,但是我不知道如何让他们火在任何价值的改变对于一些具体的价值。
以下选择:
- 提出的额外事件的视图模型,订阅的图码-在后面。
- 创建一个datatrigger开酒店所提到的,使用转换器,将返回真的,如果价值是变化的。
- 创建一个datatrigger开一个新布尔酒店的模型,它被用于"信号"的改变。
- 创建一个附加行为的控制,这将订购的控制是依赖性的改变,并开始。
这一做你喜欢/使用?我有没有错过任何的选择吗?
P.S.这将是很好(但并不严重)如果该解决办法将提供一种可能性开始画第一和反映的价值变化,当它结束。
解决方案
好吧,这是什么我来到之后,一些尝试。
我已经创建了一个表达的混3触发一个依赖性的财产(我把它命名订阅).我约束订阅的同样的价值,我的文本块定和触发这附ControlStoryboardAction从表达的混3.
这就是触发:
public class DataTriggerPlus : TriggerBase<DependencyObject>
{
public static readonly DependencyProperty SubscriptionProperty =
DependencyProperty.Register("Subscription",
typeof(string),
typeof(DataTriggerPlus),
new FrameworkPropertyMetadata("",
new PropertyChangedCallback(OnSubscriptionChanged)));
public string Subscription
{
get { return (string)GetValue(SubscriptionProperty); }
set { SetValue(SubscriptionProperty, value); }
}
private static void OnSubscriptionChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
((DataTriggerPlus)d).InvokeActions(null);
}
}
这里是它,是附着于故事情节:
<TextBlock x:Name="textBlock" Text="{Binding TestProp}" Background="White">
<i:Interaction.Triggers>
<local:DataTriggerPlus Subscription="{Binding TestProp}">
<im:ControlStoryboardAction
Storyboard="{StaticResource Storyboard1}"/>
</local:DataTriggerPlus>
</i:Interaction.Triggers>
</TextBlock>
我喜欢这种方法很多,伟大的工作,尽3设计师!
编辑:回答提请评论...
是的,它的船只与融合。你可以只包括Microsoft.Expression.Interactions.dll 和系统。窗户。交互性项目。
是的,它详细(我已要求,如果有人想出了一个很好的方式来适用的行为通过的风格 在这个问题)-但是还有一个有益的灵活性。例如,你不仅可以启动一个故事情节,但也开关一国或做其他一些行动从相同的触发器。
其他提示
你可以创建一个触发,将开始动画。
事情是这样的:
<Style>
<Style.Triggers>
<Trigger
Property="ViewModelProperty"
Value="True">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="YourStoryBoard" />
</Trigger.EnterActions>
</Trigger>
</Style.Triggers>
</Style>
作为对这一问题对于该问题的设定值一旦画完成,这是一点点的痛苦。作为我知道你会需要使用完成的事故,这需要代码后面,这是你想要的东西,以避免与。.
我已经试过使用EventTriggers绑定到完成的事件,但是,还引入了一些并发症。看看 在这里, 更多的细节。
不隶属于 StackOverflow