2012-10-01 153 views
1

我有下面的樣式應用到我ListViewItemDynamicResource拋出一個異常

<UserControl.Resources> 

<local:Look x:Key="ListViewItemLook" Background="Magenta"/> 


<Style x:Key="ListViewItemStyle" TargetType="{x:Type ListViewItem}"> 
<Style.Triggers> 

    <Trigger Property="IsSelected" Value="True"> 
     <Setter Property="Background" Value="{Binding Source={DynamicResource ListViewItemLook}, Path=Background}"/> 
    </Trigger> 

</Style.Triggers> 

</Style> 

,但我得到一個例外,我試圖改變:

<Setter Property="Background" Value="{Binding Path=Background}"/> 

,並加入到風格:

<Setter Property="DataContext" Value="{DynamicResource ListViewItemLook}"/> 

但就是不起作用。我無法綁定到StaticResource,因爲我需要設置BackGround屬性運行時。

我該怎麼辦?謝謝。

+0

你會得到什麼例外? – Surfbutler

+0

Look類的Background屬性是Brush還是Color? – zahir

+0

@zahir是一個刷子 – Nick

回答

0

如果你想本地:外觀和setter方法來指代相同的顏色,進行一個小的重構:

拉出顏色到一個單獨的SolidColorBrush,使這兩個項目是指它:

<SolidColorBrush x:Key="SelectedListViewItemBackground" Color="Magenta" /> 
<local:Look x:Key="whatever" Background="{StaticResource SelectedListViewItemBackground}" /> 
<Setter Property="Background" Value="{StaticResource SelectedListViewItemBackground}" /> 

如果您正在嘗試做其他事情,我無法弄清楚它是什麼,因爲這個問題沒有意義。

+0

如果背景是一個StaticResource,當我在運行時更改它(SelectedListViewItemBackground)時,我的ListViewItem是否會自動更新其背景? – Nick

+0

如果您在運行時修改筆刷的顏色,則不會。雖然這很容易通過使其成爲DynamicResource來進行更改。除了將靜態詞改爲動態之外,代碼沒有改變。 –

0

據我所知,DynamicResource擴展使用DependencyProperty機制(非常像綁定)。因此,您不能使用DynamicResource設置Binding對象的Source屬性,因爲它不是DependencyProperty。另外,如果你想改變Look的Background屬性而不是資源中的Look自身,然後將Look設置爲綁定屬性的靜態資源應該不成問題。當然,Look類的Background屬性應該觸發一個PropertyChanged事件或者是一個DependencyProperty本身。