2010-07-25 19 views
0

在WPF自定義控件中,我用於實現基於此自定義控件的另一個屬性的自定義控件的外觀更改,並藉助於觸發器機制,例如,當我的自定義控制改變其屬性AStatus重視Available其背景色更改爲Green當另一個屬性發生變化時更改Silverlight自定義控件的樣式

<Trigger Property="AStatus" Value="Available"> 
    <Setter TargetName="PART1" Property="Background" Value="Green"/> 
    <Setter TargetName="PART_Backgr" Property="Background" Value="Green"/> 
</Trigger> 

但Silverlight的缺乏觸發器功能。爲了改變Silverlight中自定義控件的外觀,應該使用VisualStateManager。但是我無法在VisualStateManager的幫助下找到這種情況的實現方式。

當自定義控件的另一個屬性更改時,如何實現更改Silverlight自定義控件的樣式?

回答

1

你有兩個合理的方案:

1)在該屬性「AStatus」,您可能希望依賴屬性,切換到使用VisualStateManager一個新的VisualState後盾代碼。當使用這種技術時,沒有像WPF一樣的完全XAML解決方案。創建一個代表您想要使用的樣式/設置器的VisualState(非常像觸發器)。

Here是我博客中的一個例子。 2)如果你使用Blend 4,你可以使用DataStateBehavior來執行本來可以手動完成的工作(如選項#1所示)。您可以下載Blend 4 SDK以使用XAML(或視覺設計師)進行這些類型的更改。

雖然編寫自定義控件以儘量減少對其他程序集的依賴性,但我通常會使用#1。

+0

謝謝!你能否指定,關於選項#1,你是否指的是使用某個事件處理程序切換到XAML頁面的代碼隱藏文件中的新VisualState?如果是,那麼您更喜歡使用哪個事件處理程序?如果你的意思是在包含我的自定義控件的所有屬性的C#文件中進行切換(順便說一下,它們是依賴項屬性),那麼讓它成爲MyCustControl.cs,你能否提供這部分代碼的一些小例子? +1 – rem 2010-07-26 04:46:50

+0

在XAML頁面後面的代碼中,在屬性AStatus中。我在我的博客上指出了一個例子。 – WiredPrairie 2010-07-26 12:50:43

+0

謝謝!這對我來說是一個好的開始。 – rem 2010-07-26 17:45:46

相關問題