2013-03-07 99 views
0

我有一个简单的应用程序与ListView控件已编辑模板来禁用任何选择。基本上它就像网格,但它可以使用ItemsSource属性获得项目并具有列。我已经使用MSDN的ListView控件的模板,并删除所有选择等,但仍然 一些利润仍然存在,我不知道如何删除它们。ListView模板之间没有间隙

的XAML如下:

<Window.Resources> 
<!--Control colors.--> 
     <Color x:Key="WindowColor">#FFE8EDF9</Color> 
     <Color x:Key="ContentAreaColorLight">#FFC5CBF9</Color> 
     <Color x:Key="ContentAreaColorDark">#FF7381F9</Color> 

     <Color x:Key="DisabledControlLightColor">#FFE8EDF9</Color> 
     <Color x:Key="DisabledControlDarkColor">#FFC5CBF9</Color> 
     <Color x:Key="DisabledForegroundColor">#FF888888</Color> 

     <Color x:Key="SelectedBackgroundColor">#FFC5CBF9</Color> 
     <Color x:Key="SelectedUnfocusedColor">#FFDDDDDD</Color> 

     <Color x:Key="ControlLightColor">White</Color> 
     <Color x:Key="ControlMediumColor">#FF7381F9</Color> 
     <Color x:Key="ControlDarkColor">#FF211AA9</Color> 

     <Color x:Key="ControlMouseOverColor">#FF3843C4</Color> 
     <Color x:Key="ControlPressedColor">#FF211AA9</Color> 


     <Color x:Key="GlyphColor">#FF444444</Color> 
     <Color x:Key="GlyphMouseOver">sc#1, 0.004391443, 0.002428215, 0.242281124</Color> 

     <!--Border colors--> 
     <Color x:Key="BorderLightColor">#FFCCCCCC</Color> 
     <Color x:Key="BorderMediumColor">#FF888888</Color> 
     <Color x:Key="BorderDarkColor">#FF444444</Color> 

     <Color x:Key="PressedBorderLightColor">#FF888888</Color> 
     <Color x:Key="PressedBorderDarkColor">#FF444444</Color> 

     <Color x:Key="DisabledBorderLightColor">#FFAAAAAA</Color> 
     <Color x:Key="DisabledBorderDarkColor">#FF888888</Color> 

     <Color x:Key="DefaultBorderBrushDarkColor">Black</Color> 

     <!--Control-specific resources.--> 
     <Color x:Key="HeaderTopColor">#FFC5CBF9</Color> 
     <Color x:Key="DatagridCurrentCellBorderColor">Black</Color> 
     <Color x:Key="SliderTrackDarkColor">#FFC5CBF9</Color> 

     <Color x:Key="NavButtonFrameColor">#FF3843C4</Color> 

     <LinearGradientBrush x:Key="MenuPopupBrush" 
        EndPoint="0.5,1" 
        StartPoint="0.5,0"> 
      <GradientStop Color="{DynamicResource ControlLightColor}" 
       Offset="0" /> 
      <GradientStop Color="{DynamicResource ControlMediumColor}" 
       Offset="0.5" /> 
      <GradientStop Color="{DynamicResource ControlLightColor}" 
       Offset="1" /> 
     </LinearGradientBrush> 

     <LinearGradientBrush x:Key="ProgressBarIndicatorAnimatedFill" 
        StartPoint="0,0" 
        EndPoint="1,0"> 
      <LinearGradientBrush.GradientStops> 
       <GradientStopCollection> 
        <GradientStop Color="#000000FF" 
        Offset="0" /> 
        <GradientStop Color="#600000FF" 
        Offset="0.4" /> 
        <GradientStop Color="#600000FF" 
        Offset="0.6" /> 
        <GradientStop Color="#000000FF" 
        Offset="1" /> 
       </GradientStopCollection> 
      </LinearGradientBrush.GradientStops> 
     </LinearGradientBrush> 



     <Style x:Key="{x:Static GridView.GridViewScrollViewerStyleKey}" 
     TargetType="ScrollViewer"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ScrollViewer"> 
         <Grid Background="{TemplateBinding Background}"> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="*" /> 
           <ColumnDefinition Width="Auto" /> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="*" /> 
           <RowDefinition Height="Auto" /> 
          </Grid.RowDefinitions> 

          <DockPanel Margin="{TemplateBinding Padding}"> 
           <ScrollViewer DockPanel.Dock="Top" 
          HorizontalScrollBarVisibility="Hidden" 
          VerticalScrollBarVisibility="Hidden" 
          Focusable="false"> 
            <GridViewHeaderRowPresenter Margin="0,0,0,0" 
              Columns="{Binding Path=TemplatedParent.View.Columns, 
       RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderContainerStyle="{Binding 
       Path=TemplatedParent.View.ColumnHeaderContainerStyle, 
       RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderTemplate="{Binding 
       Path=TemplatedParent.View.ColumnHeaderTemplate, 
       RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderTemplateSelector="{Binding 
       Path=TemplatedParent.View.ColumnHeaderTemplateSelector, 
       RelativeSource={RelativeSource TemplatedParent}}" 
              AllowsColumnReorder="{Binding 
       Path=TemplatedParent.View.AllowsColumnReorder, 
       RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderContextMenu="{Binding 
       Path=TemplatedParent.View.ColumnHeaderContextMenu, 
       RelativeSource={RelativeSource TemplatedParent}}" 
              ColumnHeaderToolTip="{Binding 
       Path=TemplatedParent.View.ColumnHeaderToolTip, 
       RelativeSource={RelativeSource TemplatedParent}}" 
              SnapsToDevicePixels="{TemplateBinding 
       SnapsToDevicePixels}" /> 
           </ScrollViewer> 

           <ScrollContentPresenter Name="PART_ScrollContentPresenter" 
            KeyboardNavigation.DirectionalNavigation="Local" 
            CanContentScroll="True" 
            CanHorizontallyScroll="False" 
            CanVerticallyScroll="False" /> 
          </DockPanel> 

          <ScrollBar Name="PART_HorizontalScrollBar" 
        Orientation="Horizontal" 
        Grid.Row="1" 
        Maximum="{TemplateBinding ScrollableWidth}" 
        ViewportSize="{TemplateBinding ViewportWidth}" 
        Value="{TemplateBinding HorizontalOffset}" 
        Visibility="{TemplateBinding ComputedHorizontalScrollBarVisibility}" /> 

          <ScrollBar Name="PART_VerticalScrollBar" 
        Grid.Column="1" 
        Maximum="{TemplateBinding ScrollableHeight}" 
        ViewportSize="{TemplateBinding ViewportHeight}" 
        Value="{TemplateBinding VerticalOffset}" 
        Visibility="{TemplateBinding ComputedVerticalScrollBarVisibility}" /> 

         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="GridViewColumnHeaderGripper" 
     TargetType="Thumb"> 
      <Setter Property="Width" 
      Value="18" /> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <LinearGradientBrush StartPoint="0,0" 
          EndPoint="0,1"> 
         <LinearGradientBrush.GradientStops> 
          <GradientStopCollection> 
           <GradientStop Color="{DynamicResource BorderLightColor}" 
          Offset="0.0" /> 
           <GradientStop Color="{DynamicResource BorderDarkColor}" 
          Offset="1.0" /> 
          </GradientStopCollection> 
         </LinearGradientBrush.GradientStops> 
        </LinearGradientBrush> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type Thumb}"> 
         <Border Padding="{TemplateBinding Padding}" 
       Background="Transparent"> 
          <Rectangle HorizontalAlignment="Center" 
        Width="1" 
        Fill="{TemplateBinding Background}" /> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="BorderBrush"> 
       <Setter.Value> 
        <LinearGradientBrush EndPoint="0.5,1" 
          StartPoint="0.5,0"> 
         <GradientStop Color="Black" 
         Offset="0" /> 
         <GradientStop Color="White" 
         Offset="1" /> 
        </LinearGradientBrush> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="{x:Type GridViewColumnHeader}" 
     TargetType="GridViewColumnHeader"> 
      <Setter Property="HorizontalContentAlignment" 
      Value="Center" /> 
      <Setter Property="VerticalContentAlignment" 
      Value="Center" /> 
      <Setter Property="Foreground" 
      Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="GridViewColumnHeader"> 
         <Grid> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal" /> 
            <VisualState x:Name="MouseOver"> 
            </VisualState> 
            <VisualState x:Name="Pressed" /> 
            <VisualState x:Name="Disabled" /> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <Border x:Name="HeaderBorder" 
        BorderThickness="0,1,0,1" 
        Padding="0,0,0,0"> 
           <Border.BorderBrush> 
            <LinearGradientBrush StartPoint="0,0" 
            EndPoint="0,1"> 
             <LinearGradientBrush.GradientStops> 
              <GradientStopCollection> 
               <GradientStop Color="{DynamicResource BorderLightColor}" 
            Offset="0.0" /> 
               <GradientStop Color="{DynamicResource BorderDarkColor}" 
            Offset="1.0" /> 
              </GradientStopCollection> 
             </LinearGradientBrush.GradientStops> 
            </LinearGradientBrush> 

           </Border.BorderBrush> 

           <ContentPresenter x:Name="HeaderContent" 
           Margin="0,0,0,1" 
           RecognizesAccessKey="True" 
           VerticalAlignment="{TemplateBinding VerticalContentAlignment}" 
           HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" 
           SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/> 
          </Border> 
          <!--<Thumb x:Name="PART_HeaderGripper" 
       HorizontalAlignment="Right" 
       Margin="0,0,-9,0" 
       Style="{StaticResource GridViewColumnHeaderGripper}" />--> 
         </Grid> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
      <Style.Triggers> 
       <Trigger Property="Role" 
      Value="Floating"> 
        <Setter Property="Opacity" 
       Value="0.7" /> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="GridViewColumnHeader"> 
           <Canvas Name="PART_FloatingHeaderCanvas"> 
            <Rectangle Fill="#60000000" 
         Width="{TemplateBinding ActualWidth}" 
         Height="{TemplateBinding ActualHeight}" /> 
           </Canvas> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
       <Trigger Property="Role" 
      Value="Padding"> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="GridViewColumnHeader"> 
           <Border Name="HeaderBorder" 
        BorderThickness="0,1,0,1"> 
            <Border.Background> 
             <SolidColorBrush Color="{DynamicResource ControlLightColor}" /> 
            </Border.Background> 
            <Border.BorderBrush> 
             <LinearGradientBrush StartPoint="0,0" 
            EndPoint="0,1"> 
              <LinearGradientBrush.GradientStops> 
               <GradientStopCollection> 
                <GradientStop Color="{DynamicResource BorderLightColor}" 
            Offset="0.0" /> 
                <GradientStop Color="{DynamicResource BorderDarkColor}" 
            Offset="1.0" /> 
               </GradientStopCollection> 
              </LinearGradientBrush.GradientStops> 
             </LinearGradientBrush> 
            </Border.BorderBrush> 
           </Border> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 

     <Style x:Key="{x:Type ListView}" 
     TargetType="ListView"> 
      <Setter Property="SnapsToDevicePixels" 
      Value="true" /> 
      <Setter Property="OverridesDefaultStyle" 
      Value="true" /> 
      <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" 
      Value="Auto" /> 
      <Setter Property="ScrollViewer.VerticalScrollBarVisibility" 
      Value="Auto" /> 
      <Setter Property="ScrollViewer.CanContentScroll" 
      Value="true" /> 
      <Setter Property="VerticalContentAlignment" 
      Value="Center" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListView"> 
         <Border Name="Border" 
       BorderThickness="10"> 
          <Border.Background> 
           <SolidColorBrush Color="{StaticResource ControlLightColor}" /> 
          </Border.Background> 
          <Border.BorderBrush> 
           <SolidColorBrush Color="{StaticResource BorderMediumColor}" /> 
          </Border.BorderBrush> 
          <ScrollViewer Style="{DynamicResource 
         {x:Static GridView.GridViewScrollViewerStyleKey}}"> 
           <ItemsPresenter /> 
          </ScrollViewer> 
         </Border> 
         <ControlTemplate.Triggers> 
          <Trigger Property="IsGrouping" 
        Value="true"> 
           <Setter Property="ScrollViewer.CanContentScroll" 
        Value="false" /> 
          </Trigger> 
          <Trigger Property="IsEnabled" 
        Value="false"> 
           <Setter TargetName="Border" 
        Property="Background"> 
            <Setter.Value> 
             <SolidColorBrush Color="{DynamicResource DisabledBorderLightColor}" /> 
            </Setter.Value> 
           </Setter> 
          </Trigger> 
         </ControlTemplate.Triggers> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <Style x:Key="{x:Type ListViewItem}" 
     TargetType="ListViewItem"> 
      <Setter Property="SnapsToDevicePixels" 
      Value="true" /> 
      <Setter Property="OverridesDefaultStyle" 
      Value="true" /> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="ListBoxItem"> 
         <Border x:Name="Border" 
       Padding="0" 
       SnapsToDevicePixels="true" 
       Background="Transparent"> 
          <VisualStateManager.VisualStateGroups> 
           <VisualStateGroup x:Name="CommonStates"> 
            <VisualState x:Name="Normal" /> 
            <VisualState x:Name="MouseOver" /> 
            <VisualState x:Name="Disabled" /> 
           </VisualStateGroup> 
           <VisualStateGroup x:Name="SelectionStates"> 
            <VisualState x:Name="Unselected" /> 
            <VisualState x:Name="Selected"> 
             <!--<Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" 
               Storyboard.TargetProperty="(Panel.Background). 
        (SolidColorBrush.Color)"> 
               <EasingColorKeyFrame KeyTime="0" 
             Value="{StaticResource SelectedBackgroundColor}" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard> 
            </VisualState> 
            <VisualState x:Name="SelectedUnfocused"> 
             <Storyboard> 
              <ColorAnimationUsingKeyFrames Storyboard.TargetName="Border" 
               Storyboard.TargetProperty="(Panel.Background). 
        (SolidColorBrush.Color)"> 
               <EasingColorKeyFrame KeyTime="0" 
             Value="{StaticResource SelectedUnfocusedColor}" /> 
              </ColorAnimationUsingKeyFrames> 
             </Storyboard>--> 
            </VisualState> 
           </VisualStateGroup> 
          </VisualStateManager.VisualStateGroups> 
          <GridViewRowPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" Margin="0"> 
          </GridViewRowPresenter> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
    </Window.Resources> 
    <Grid> 

     <ListView x:Name="listView"> 
      <ListView.View> 
       <GridView AllowsColumnReorder="False"> 
        <GridViewColumn Header="Xs" Width="150" x:Name="col1"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel Margin="0"> 
            <Line X1="0" X2="{Binding Width, ElementName=col1}" Stroke="Black" StrokeThickness="2"/> 
            <!--<TextBlock Text="{Binding X}" Background="AntiqueWhite"/>--> 
            <TextBlock Text="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" Background="AntiqueWhite"/> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Ys" Width="150" x:Name="col2"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel> 
            <Line X1="0" X2="{Binding Width, ElementName=col2}" Stroke="Black" StrokeThickness="2"/> 
            <!--<TextBlock Text="{Binding Y}"/>--> 
            <TextBlock Text="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"/> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Xs" Width="150" x:Name="col3"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel> 
            <Line X1="0" X2="{Binding Width, ElementName=col3}" Stroke="Black" StrokeThickness="2"/> 
            <TextBlock Text="XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX" Background="AntiqueWhite"/> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Ys" Width="150" x:Name="col4"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel> 
            <Line X1="0" X2="{Binding Width, ElementName=col4}" Stroke="Black" StrokeThickness="2"/> 
            <TextBlock Text="YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY"/> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
        <GridViewColumn Header="Delete"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <Button Content="Delete"/> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView> 
      </ListView.View> 
     </ListView> 
    </Grid> 

代码隐藏是:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 
     listView.ItemsSource = new List<dynamic> { 
      new {X=5,Y=5}, 
     new {X=5,Y=5}, 
     new {X=5,Y=5}, 
     new {X=5,Y=5},new {X=5,Y=5}, 
     new {X=5,Y=5}, 
     new {X=5,Y=5}, 
     new {X=5,Y=5}}; 
    } 
} 

所以收藏是下降死的简单,而且ListView控件只能显示多个X和多个y方向的弦为每个项目。

这就是应用程序窗口看起来像列与列之间的间隙。

enter image description here

如何删除差距?

+0

我会做的第一件事就是使用[Snoop](http://snoopwpf.codeplex.com/)在运行时检查可视化树,使用正在运行的应用程序,并尝试找出这些差距究竟是什么(它是一个'Margin'?,一个'Padding'?,一个不需要的元素放在那里?) – 2013-03-07 15:48:43

+0

我发现调查视觉树的值(6,0,6,0)。这是造成差距的原因 – Blablablaster 2013-03-07 16:27:26

回答

1

正如您在source code中看到的那样,这是GridViewColumn s的默认边距。

private static readonly Thickness _defalutCellMargin = new Thickness(6, 0, 6, 0); 

该值是使用在GridViewRowPresenter私人CreateCell(GridViewColumn column)方法,并且不能被重写。只有你可以做的是在单元格模板中设置一个反余量。

Margin="-6,0" 

另请参阅this related question