2015-07-12 48 views
1

我試圖設計我的listview模板,其中包含一個gridview。我試着用ItemsPresenter來做,並且它工作正常,但是我的gridview的標題消失了。使用gridview設計列表視圖

我應該用什麼來保存我的標題?

<Style TargetType="{x:Type ListView}"> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListView}"> 
        <Border x:Name="Bd" 
          SnapsToDevicePixels="true"> 
         <ScrollViewer Focusable="false"> 
          <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
         </ScrollViewer> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

編輯:我的列表視圖

<ListView Name="findReplaceView" Margin="10" Grid.Row="1" Grid.Column="0" 
        HorizontalContentAlignment="Center" VerticalContentAlignment="Center" 
        SelectedItem="{Binding SelectedItem, Mode=TwoWay}" 
        ItemsSource="{Binding FindAndReplaceItems}"> 
    <ListView.View> 
    <GridView AllowsColumnReorder="False"> 
     <GridViewColumn Header="Find" DisplayMemberBinding="{Binding Find}" 
            Width="{Binding ElementName=helperField1, Path=ActualWidth}"/> 
     <GridViewColumn Header="Replace" DisplayMemberBinding="{Binding Replace}" 
            Width="{Binding ElementName=helperField2, Path=ActualWidth}"/> 
    </GridView> 
    </ListView.View> 
</ListView> 
+0

請在裏面提供你的'listview'和'gridview'的相關代碼。 –

+0

添加了它,但我不明白爲什麼它很重要 – Subject009

回答

0

那是因爲你沒有風格的頭部分。這是你應該如何做到這一點:

<Style TargetType="{x:Type ListView}"> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Grid HorizontalAlignment="Left"> 
        <Grid.RowDefinitions> 
         <RowDefinition Height="Auto"/> 
         <RowDefinition Height="*"/> 
        </Grid.RowDefinitions> 
        <!-- This is how your headers are presented --> 
         <ItemsControl ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=ListView},Path=View.Columns}"> 
          <ItemsControl.ItemTemplate> 
           <DataTemplate> 
            <Border BorderThickness="1" BorderBrush="LightGray" Background="MidnightBlue"> 
             <TextBlock Foreground="WhiteSmoke" 
                TextAlignment="Center" 
                FontWeight="Bold" 
                Text="{Binding Header}" 
                Width="{Binding ActualWidth}"/> 
            </Border> 
           </DataTemplate> 
          </ItemsControl.ItemTemplate> 
          <ItemsControl.ItemsPanel> 
           <ItemsPanelTemplate> 
            <StackPanel Orientation="Horizontal"/> 
           </ItemsPanelTemplate> 
          </ItemsControl.ItemsPanel> 
         </ItemsControl> 
        <!-- This is how your items are presented --> 
        <Border x:Name="Bd" Grid.Row="1" 
        SnapsToDevicePixels="true"> 
         <ScrollViewer Focusable="false"> 
          <ItemsPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
         </ScrollViewer> 
        </Border> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

在上述代碼中有2 Grid.RowDefinitionsheight="Auto"height="*"第一個是代表報頭部分和所述第二個是該區域(即頂行)剩餘區域包含您的ItemsPresenter並確定您的物品如何呈現。


編輯

由於這是假設是一個ListView,它是列在一些ListView.View已定義的大將風範,我想用的標題的ItemsControl部分將使你的風格相當靈活。我相應地修改了我的代碼示例,其中標題部分是水平方向的ItemsControl,它的ItemsSource綁定到ListView.View.Columns。這種方式的列數將取決於您的ListView中的列數。另外,ItemsControl.ItemTemplateTextBlock,它的文本被綁定到相應列的標題,因此該樣式中的列標題將與您的ListView中的列標題相同。

+0

這種方式雖然鎖定標題名稱始終是相同的。任何方式來使這種靈活? – Subject009

+0

你可以使用綁定從'ListView.View'像這樣獲取頭

+0

足夠接近thnx的幫助 – Subject009