我可以在基本(非GridView)模式下輕鬆「隱式」設計ListView,但是我嘗試在GridView模式下隱式設置ListView的方式失敗了。下面的作品是因爲我明確地設置了第二個ListView的Style和ItemContainerStyle。如果你刪除了這兩個設置,第二個ListView並不像第一個那樣被隱式地設計。看起來基本的ListView需要一個ContentPresenter,而一個GridView ListView需要一個GridViewRowPresenter。是否可以在GridView模式下隱式設置WPF ListView?
我在這裏跑到一個WPF磚牆嗎?這甚至有可能嗎?如果沒有,它會使創建應用程序皮膚的穩健性下降,因爲現在用戶必須知道在GridView模式下顯示的ListView上顯式設置Style和ItemContainerStyle。
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:system="clr-namespace:System;assembly=mscorlib"
Title="MainWindow" Height="350" Width="525">
<Window.Resources>
<Style TargetType="ListView">
<Setter Property="Background" Value="Lime"/>
</Style>
<Style TargetType="ListViewItem">
<Setter Property="Background" Value="Yellow"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListBoxItem}">
<Grid>
<ContentPresenter x:Name="ContentHost" Margin="{TemplateBinding Padding}"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}" />
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
<Style x:Key="{x:Static GridView.GridViewStyleKey}"
TargetType="{x:Type ListView}">
<Setter Property="Background" Value="Lime"/>
</Style>
<Style x:Key="{x:Static GridView.GridViewItemContainerStyleKey}"
TargetType="{x:Type ListViewItem}">
<Setter Property="Background" Value="Yellow"/>
</Style>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListView x:Name="_listView1">
<system:String>Item 1</system:String>
<system:String>Item 2</system:String>
<system:String>Item 3</system:String>
</ListView>
<ListView x:Name="_listView2" Grid.Column="1"
Style="{StaticResource {x:Static GridView.GridViewStyleKey}}"
ItemContainerStyle="{StaticResource {x:Static GridView.GridViewItemContainerStyleKey}}">
<ListView.View>
<GridView>
<GridViewColumn Header="Date"/>
<GridViewColumn Header="Day of Week" DisplayMemberBinding="{Binding DayOfWeek}" />
<GridViewColumn Header="Year" DisplayMemberBinding="{Binding Year}" />
</GridView>
</ListView.View>
<system:DateTime>1/1/2010</system:DateTime>
<system:DateTime>1/1/2011</system:DateTime>
<system:DateTime>1/1/2012</system:DateTime>
</ListView>
</Grid>
</Window>
這可能是一個有點晚來,但我試圖回答另一個問題時,發現可能是有益的一種變通方法:http://stackoverflow.com/questions/18700352/listviewitem -override-default-style-break-gridviews/18775166#18775166 – Chris 2013-09-12 22:16:08
將其轉換爲答案,我會將其標記爲這樣。謝謝! – 2013-09-13 01:05:47
完成,很高興它很有用! – Chris 2013-09-13 10:24:36