標籤:style blog http ar io color os 使用 sp
使用 DataTrigger 來應用屬性值
當前表示不會告訴我們某個 Task 是家庭任務還是辦公室任務。記住 Task 對象擁有類型為 TaskType 的 TaskType 屬性,該類型是一個枚舉,其值可以為 Home 和 Work。
在下面的樣本中,DataTrigger 將 border 元素的 BorderBrush 設定為 Yellow(如果 TaskType 屬性為 TaskType.Home)。
<DataTemplate x:Key="myTaskTemplate">...<DataTemplate.Triggers> <DataTrigger Binding="{Binding Path=TaskType}"> <DataTrigger.Value> <local:TaskType>Home</local:TaskType> </DataTrigger.Value> <Setter TargetName="border" Property="BorderBrush" Value="Yellow"/> </DataTrigger></DataTemplate.Triggers>...</DataTemplate>
家庭任務的邊界顯示為黃色,辦公室任務的邊界顯示為淺綠色。
在此樣本中,DataTrigger 使用 Setter 來設定屬性值。觸發器類也擁有 EnterActions 和 ExitActions 屬性,這些屬性允許您開始一組操作,例如動畫操作。而且,還有一個MultiDataTrigger 類,它允許您根據多個資料繫結屬性值應用更改。
就效能而言,使用轉換器建立上述效果的效率要高一點。 另外,建立自己的轉換器使您可以獲得更多的靈活性,因為您提供的是自己的邏輯。 最後,您選擇的技術取決於您當時的具體情況和您的偏好。 有關如何編寫轉換器的資訊,請參見IValueConverter。
DataTemplate 中有哪些內容?
在前面的樣本中,我們使用 DataTemplate.Triggers 屬性將觸發器放入 DataTemplate 中。 觸發器的 Setter 設定 DataTemplate 中元素(Border 元素)的屬性值。 但是,如果您的 Setters 相關屬性不是當前 DataTemplate 中元素的屬性,則使用 Style(用於 ListBoxItem 類)設定屬性更合適(如果您要綁定的控制項是 ListBox)。 例如,如果您想要在滑鼠指向某一項時讓您的 Trigger 對該項的 Opacity 值進行動畫處理,則需要在 ListBoxItem 樣式中定義觸發器。 有關樣本,請參見 Introduction to Styling and Templating Sample(樣式和模板化簡介樣本)。
通常需要注意:DataTemplate 會應用於每個產生的 ListBoxItem(有關它實際應用的方式和場合的更多資訊,請參見 ItemTemplate 頁)。 DataTemplate 僅與資料對象的表示和外觀有關。 在大多數情況下,所有其他表示方面(例如,項在被選中時的外觀或 ListBox 排列項的方式)不在 DataTemplate 定義範圍內。 有關樣本,請參見對 ItemsControl 進行樣式和模板處理一節。
參考
[WPF系列]-資料邦定之DataTemplate 使用 DataTrigger 來應用屬性值