好吧,这是我经过一番尝试后才发现的。
我已经创建了具有依赖项属性的Expression Blend 3触发器(我将其命名为Subscription)。我认购绑定到我的TextBlock绑定到相同的值,这触发附加到ControlStoryboardAction从Expression Blend中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名设计师!
编辑:回答Drew评论...
是的,它附带Blend。您可以将Microsoft.Expression.Interactions.dll和System.Windows.Interactivity包含到您的项目中。
是的,它是冗长的(我问过是否有人通过样式in this question找到了一种适用行为的好方法) - 但也有灵活性的好处。例如,您不仅可以启动故事板,还可以切换状态或从同一触发器执行其他操作。
同样,如果属性不是布尔值或一组选项,但是是一个任意的字符串或数字呢? – 2009-07-13 23:51:18
然后你会使用一个ValueConverter。相同的解决方案,只需使用valueConverter – 2009-07-14 02:01:41