具有可选样式的列表视图



我有一个应用程序可以选择加载自定义主题。在该主题中,我有一个更改突出显示颜色的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 获得异常。

有没有办法从主题中获取外观(如果加载),同时仍然能够双击网格行?

我想

出了如何同时拥有可选样式和单击事件的方法。我为列表视图设置了一个加载事件,如果在 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; 
}

相关内容

  • 没有找到相关文章

最新更新