我有一个应用程序,可以选择加载自定义主题。在那个主题中,我有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 =&#34; {StaticResource {x:Type ListViewItem}}&#34;。如果加载了主题,则此方法有效,但是,如果使用默认的Windows样式,则会从StaticResourceHolder中获取异常。
有没有办法从主题中获取外观(如果已加载),同时仍然可以双击网格行?
答案 0 :(得分: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;
}