2013-07-31 112 views
0

今天,我开始教我自己如何创建一个WPF应用程序(最终)WPF的ListView样式边框

,所以我开始习惯它,但我已经打了一下碰钉子与样式列表视图。

在这上面的图片你可以看到它完美的工作(约选择无边框)

enter image description here

然而,在第二张照片,你可以看到周围的选择一个边陲..看来这只是当我使用键盘转到列表中的下一个项目时发生。

有什么我在样式中失踪,所以我可以摆脱这个边界?

代码:(记得我才开始学习,所以今天它可能是混乱的)

列表视图样式

<Style TargetType="{x:Type ListView}"> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="BorderThickness" Value="0" /> 
     </Trigger> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="BorderThickness" Value="0" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<Style TargetType="{x:Type ListViewItem}"> 
    <Setter Property="BorderThickness" Value="0" /> 
    <Setter Property="Foreground" Value="#4b0037" /> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type ListViewItem}"> 
       <Border 
        BorderBrush="Transparent" 
        BorderThickness="0" 
        Background="{TemplateBinding Background}"> 
        <GridViewRowPresenter HorizontalAlignment="Stretch" VerticalAlignment="{TemplateBinding VerticalContentAlignment}" Width="Auto" Margin="0" Content="{TemplateBinding Content}"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 

    <Style.Triggers> 
     <Trigger Property="IsMouseOver" Value="True"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <ImageBrush ImageSource="images/selection.png"/> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="BorderThickness" Value="0" /> 
     </Trigger> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background"> 
       <Setter.Value> 
        <ImageBrush ImageSource="images/selection.png"/> 
       </Setter.Value> 
      </Setter> 
      <Setter Property="BorderThickness" Value="0" /> 
      <Setter Property="Foreground" Value="#FFFFFF" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

列表视图XAML

  <ListView Background="transparent" Margin="10 10 10 10" x:Name="Mylist" HorizontalAlignment="Stretch" VerticalContentAlignment="center" VerticalAlignment="Stretch" BorderBrush="Transparent"> 
      <ListView.View> 
       <GridView> 
        <GridViewColumn Header="img" Width="150" DisplayMemberBinding="{Binding img}" /> 
        <GridViewColumn Header="name" Width="150" DisplayMemberBinding="{Binding name}" /> 
        <GridViewColumn Header="path" Width="150" DisplayMemberBinding="{Binding path}" /> 
       </GridView> 
      </ListView.View> 
     </ListView> 

回答

1

对不起,这个如果我有一个网格视图工作的地方会更容易。我的第二个想法是:ListViewItem s有个FocusVisualStyle

<Setter Property="ListViewItem.FocusVisualStyle" Value="{DynamicResource ListViewItemFocusVisualStyle}" /> 

(或者你把它设置为null,因为它是在这里完成:WPF ListView in GridView mode Highlighting problem

样式看起来是这样的:

<Style.Resources> 
    <Style x:Key="ListViewItemFocusVisualStyle"> 
     <Setter Property="Control.Template"> 
      <Setter.Value> 
       <ControlTemplate> 
        <Rectangle Margin="4, 1" StrokeThickness="1" 
           Stroke="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}" 
           StrokeDashArray="1 2" 
           SnapsToDevicePixels="True" /> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 
</Style.Resources> 
+0

非常感谢你,先生,这解决了我的问题。 – Mattigins

0

请尝试<Setter Property="Control.Padding" Value="0" />在你的风格的ListViewItem

+0

隐而不宣,你可以在你的风格设置它像这样似乎没有任何影响。 – Mattigins