2012-12-30 30 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的一部分或者基於現有模板的一部分,我通常儘量保留儘可能多的默認模板,並且只更改我關心的部分。這有點冗長,但應該做你想要的。