2013-10-29 34 views
2

我有一個應用程序可以選擇加載自定義主題。在那個主題中,我有一個ListViewItem的風格,它改變了高光顏色。在應用我有一個GridView有行時,可進行雙點擊,看起來像:可選樣式的列表視圖

<UserControl.Resources> 
    <Style x:Key="ClickableRowStyle" TargetType="{x:Type ListViewItem}"> 
     <EventSetter Event="MouseDoubleClick" Handler="RowDoubleClicked" /> 
    </Style> 
</UserControl.Resources> 

... 

<ListView ItemsSource="{Binding DataItems}" ItemContainerStyle="{StaticResource ClickableRowStyle}"> 

... Set up GridRows 

</ListView> 

我遇到的問題是,由於上述的網格使用了自己的風格,從主題不要」顏色不適用。

我曾嘗試添加BasedOn =「{StaticResource {x:Type ListViewItem}}」。這適用於主題加載後,但是,如果使用默認的Windows風格,我會從StaticResourceHolder中獲得一個異常。

有沒有辦法從主題(如果加載)同時獲得外觀,同時仍然能夠雙擊網格行?

+0

你得到什麼異常。如果它的XAMLParseException,嘗試查看它的內部異常,以確切的問題。 –

+0

在設計器中我得到{x:Type ListViewItem}無法解析。 – Mitch

+0

奇怪。你有明確的'x:Key'風格在你的主題。如果是的話,你需要在'BasedOn'中使用這個名字 –

回答

0

我想出瞭如何有一個可選的樣式,並在同一時間點擊事件。我爲列表視圖設置了一個加載事件,並且在已加載的事件中,如果ListViewItem樣式已經存在,我將使用BasedOn創建一個新樣式。

的XAML:

<ListView x:Name="listView" ItemsSource="{Binding DataItems}" Loaded="ListView_Loaded"> 

... Set grid rows 

</ListView> 

C#:

private void ListView_Loaded(object sender RoutedEventArgs e) 
{ 
    ListView listView = sender as ListView; 

    Style style; 
    if(Application.Current.Resources.Contains(typeof(ListViewItem)) 
    { 
     style = new Style(typeof(ListViewItem), (Style)Application.Current.Resources[typeof(ListViewItem)]); 
    } 
    else 
    { 
     style = new Style(typeof(ListViewItem)); 
    } 

    EventSetter setter = new EventSetter(); 
    setter.Event = ListViewItem.MouseDoubleClickEvent; 
    setter.Handler = new MouseButtonEventHandler(ListView_MouseDoubleClick); 
    style.Setters.Add(setter); 

    listView.ItemContainerStyle = style; 
}