【问题标题】:Listview with optional style具有可选样式的列表视图
【发布时间】:2013-10-29 19:07:49
【问题描述】:

我有一个可以加载自定义主题的应用程序。在那个主题中,我有一个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 中得到一个异常。

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

【问题讨论】:

  • 你得到了什么异常。如果是 XAMLParseException,请尝试查看它的内部异常以了解确切的问题。
  • 在设计器中我得到 {x:Type ListViewItem} 无法解析。
  • 奇怪。您是否明确指定了x:Key 以在您的主题中设置样式。如果是,您需要在 BasedOn 中使用该名称
  • 我没有为主题中的样式指定明确的 x:Key。仅当未加载主题时才会出现异常,因为 WPF 似乎没有默认的 ListViewItem 样式。

标签: wpf listview styles


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    • 2023-03-13
    相关资源
    最近更新 更多