好吧,這是我經過一番嘗試後才發現的。
我已經創建了具有依賴項屬性的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