2012-12-30 33 views
2

我有一个包含GridView的WPF ListView。我希望选定的行看起来“平坦”而不是3D风格。ListView与GridView选定的行 - 删除3D外观

剂量任何人都知道如何做到这一点? 谢谢, Smadar

+0

是WPF还是Windows 8现代应用程序? GridView/ListView在WPF中不存在(但在GridView中存在) – Tilak

+0

你是什么意思GridView/ListView在WPF中不存在? http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx – zmb

回答

6

3D外观是默认样式的一部分。要更改此设置,您需要更换ControlTemplateListViewItem。这里是产生以下一个简单的例子:ListView screenshot

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ListView> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="A"/> 
       </GridView> 
      </ListView.View> 
      <ListView.Items> 
       <ListViewItem Content="Item 1"/> 
       <ListViewItem Content="Item 2"/> 
       <ListViewItem Content="Item 3"/> 
      </ListView.Items> 

      <ListView.ItemContainerStyle> 
       <Style TargetType="ListViewItem"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="ListViewItem"> 
           <Border CornerRadius="2" SnapsToDevicePixels="True" 
             BorderThickness="{TemplateBinding  BorderThickness}" 
             BorderBrush="{TemplateBinding BorderBrush}" 
             Background="{TemplateBinding Background}"> 
            <Border Name="InnerBorder" CornerRadius="1" BorderThickness="1"> 
             <Grid> 
              <Grid.RowDefinitions> 
               <RowDefinition MaxHeight="11" /> 
               <RowDefinition /> 
              </Grid.RowDefinitions> 
              <Rectangle Name="UpperHighlight" Visibility="Collapsed" Fill="#75FFFFFF" /> 
              <GridViewRowPresenter Grid.RowSpan="2" 
               VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
               SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
             </Grid> 
            </Border> 
           </Border> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsSelected" Value="True"> 
             <Setter Property="Background" Value="LightBlue"/> 
            </Trigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
      </ListView.ItemContainerStyle> 
     </ListView> 
    </Grid> 
</Window> 

注意:默认模板这里http://msdn.microsoft.com/en-us/library/ms788747.aspx所在。由于没有办法改变ControlTemplate的一部分或者基于现有模板的一部分,我通常尽量保留尽可能多的默认模板,并且只更改我关心的部分。这有点冗长,但应该做你想要的。