2009-08-09 2 views
8

GridView보기에서 WPF ListView가 있고 행 강조 표시를 제거하고 싶습니다. 이 변화는 하이라이트의 대부분을 제거하는 데 도움이 있지만, 그것은 여전히 ​​나타나는 수평 막대를 제거하지 않습니다,WPF ListView/GridView 강조 표시 제거 chrome

 <ListView.ItemContainerStyle> 
     <Style TargetType="{x:Type ListViewItem}"> 
      <Setter Property="Control.Focusable" Value="False"/> 
      <Style.Triggers> 
       <Trigger Property="IsMouseOver" Value="True"> 
       <Setter Property="Background" Value="{x:Null}" /> 
       <Setter Property="BorderBrush" Value="{x:Null}" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </ListView.ItemContainerStyle> 

그러나 :

이 코드 유용한 조각은이 사이트에 한 대답에서 찾을 수 있습니다 마우스가 ListView 행 위로 이동합니다. 어떻게 제거합니까?

Button과 관련된 비슷한 문제를 처리했으며 크롬을 제거하여 Button 템플릿을 변경하는 솔루션을 발견했습니다.

이 ListView/GridView의 경우 변경할 해당 크롬 및 템플릿을 찾을 수 없습니다.

답변

14

는 Windows SDK가 설치되어있는 경우, 당신이 (당신이 샘플을 설치 가정) 모든 기본 스타일에 대한 XAML 소스를 찾을 수 있습니다

%의 ProgramFiles % \ 마이크로 소프트 의 SDK \ WINDOWS \의 V6.1을 \ Samples \ WPFSamples.zip

zip 파일에는 AeroTheme, LunaTheme 등 기본 스타일 소스가 포함 된 폴더 Core가 들어 있습니다. 불행히도이 파일들은 꽤 크기가 크고 (에어로의 경우 ~ 8500 라인) 잘 구조화되거나 포맷되지 않습니다 (IMO).

가있는 ListViewItem의 기본 컨트롤 템플릿은 다음과 같습니다

<ControlTemplate TargetType="{x:Type 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="IsMouseOver" Value="True"> 
     <Setter Property="Background" Value="{StaticResource ListItemHoverFill}" /> 
     <Setter Property="BorderBrush" Value="#FFCCF0FF" /> 
     <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" /> 
    </Trigger> 

    <Trigger Property="IsSelected" Value="True"> 
     <Setter Property="Background" Value="{StaticResource ListItemSelectedFill}" /> 
     <Setter Property="BorderBrush" Value="#FF98DDFB" /> 
     <Setter TargetName="InnerBorder" Property="BorderBrush" Value="#80FFFFFF" /> 
     <Setter TargetName="UpperHighlight" Property="Visibility" Value="Visible" /> 
     <Setter TargetName="UpperHighlight" Property="Fill" Value="#40FFFFFF" /> 
    </Trigger> 

    <MultiTrigger> 
     <MultiTrigger.Conditions> 
     <Condition Property="IsSelected" Value="True" /> 
     <Condition Property="Selector.IsSelectionActive" Value="False" /> 
     </MultiTrigger.Conditions> 

     <Setter Property="Background" Value="{StaticResource ListItemSelectedInactiveFill}" /> 
     <Setter Property="BorderBrush" Value="#FFCFCFCF" /> 
    </MultiTrigger> 

    <MultiTrigger> 
     <MultiTrigger.Conditions> 
     <Condition Property="IsSelected" Value="True" /> 
     <Condition Property="IsMouseOver" Value="True" /> 
     </MultiTrigger.Conditions> 

     <Setter Property="Background" Value="{StaticResource ListItemSelectedHoverFill}" /> 
     <Setter Property="BorderBrush" Value="#FF98DDFB" /> 
    </MultiTrigger> 

    <Trigger Property="IsEnabled" Value="False"> 
     <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}" /> 
    </Trigger> 
    </ControlTemplate.Triggers> 
</ControlTemplate> 

모든 강조를 제거하는 가장 좋은 방법은 당신이 그냥 (아마도 하나의 테두리로) GridViewRowPresenter를 포함하는 자신과의 ControlTemplate을 대체하는 아마 . 컨트롤이 비활성화되었을 때 항목을 회색으로 표시하는 트리거를 포함시키는 것을 잊지 마십시오.

+0

상단 강조 표시해야합니다! 나는 템플릿을 여기에서보고 있었다 : http://msdn.microsoft.com/en-us/library/ms788717.aspx 그리고 다른 주제를위한 것이어야하기 때문에, 나는 술집을 설명 할 수 없었다. – Tony

+0

UpperHighlight 사각형이 범인인지 확인할 수 있습니다. 감사! – Tony

+2

놀라운 ... WPF에서만 하나의 강조 요소를 제거하기 위해 스타일을 완전히 재정의해야했습니다. – aqua

0

코드를 사용하면 전혀 선이 표시되지 않습니다. 지금 기본 테마는 무엇입니까? 루나, 에어로 등? 당신의 것이 나의 것과 다를 수 있습니다, 따라서 크롬의 차이. ListView에 다른 특정 설정이 있습니까?

Style Snooper 또는 Show Me The Template 당신이보고있는 라인을 담당하는 시각적 요소를 추적하는 데 도움이 될 수 있습니다. re-templatingListView에 관심이 있으시면 원하는 효과를 얻으실 수 있습니다. 나는 윈도우 PC 앞에 아니에요

+0

Vista 테마이기 때문에 글래스 효과가 있기 때문에 Aero라고 생각합니다. 사실 XP의 사람들은 강조 표시 줄을 보지 못합니다. – Tony

8

이제이 권한을 테스트하지만 난 내가 만약 내 Window.Resources에 다음

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" /> 
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" /> 

확실하지 넣어 고정리스트 박스와 유사한 문제가 있었다 비록 당신의 listview 함께 작동합니다.

+1

몇 가지 블로그와 anwers는이 방법을 가리 킵니다. 그러나 어떤 이유로 든 절대로 작동하지 않았습니다. – Tony

+3

감사합니다. 이 방법은 Style targetType = "ListViewItem"을 사용하여 창 리소스에 넣을 때 유용했습니다. SystemColors.HighlightTextBrushKey를 SystemColors.WindowTextColor로 설정하는 행을 추가하여 텍스트 색이 배경색으로 전환되는 것을 방지했습니다. –

+0

내게 그것은 ListView와 함께 Gridview에서 작동합니다. Gridview와 함께하지 마라. – Paparazzi