2014-01-15 7 views
0

작동하지 않습니다, 그것은 단지 작동 당신은 스크린 샷에서 볼 수 있습니다하이라이트 목록보기 항목이 제대로

원본 강조 (더 스타일이 적용되지와 함께) : 사용자 정의 ItemContainerStyle이

을 적용

enter image description here

하이라이트

<Style x:Key="DetailStyle" TargetType="{x:Type ListView}"> 
     <Setter Property="l:ListBoxSelector.Enabled" Value="True"/> 
     <Setter Property="ItemContainerStyle" Value="{StaticResource DetailViewStyle}"/> 
     <Setter Property="View"> 
      <Setter.Value> 
       <GridView AllowsColumnReorder="True"> 
        <GridViewColumn Width="30" CellTemplate="{StaticResource columnIconDT}"/> 
        <GridViewColumn Header="Name" Width="100" CellTemplate="{StaticResource columnNameDT}"/> 
        <GridViewColumn Header="Size" Width="100" CellTemplate="{StaticResource columnSizeDT}"/> 
       </GridView> 
      </Setter.Value> 
     </Setter> 
    </Style> 

ItemContainerStyle : 사용자 정의 ItemContainerStyle은 ListView에 스타일

enter image description here

(마우스 ContentPresenter 이상) 적용는

enter image description here

하이라이트

<Style x:Key="DetailViewStyle" TargetType="{x:Type ListViewItem}"> 
     <EventSetter Event="ContextMenu.ContextMenuOpening" Handler="Item_ContextMenuOpening"/> 
     <EventSetter Event="PreviewMouseDoubleClick" Handler="Item_MouseDoubleClick"/> 
     <Setter Property="Margin" Value="0,0,0,-1"/> 
     <Setter Property="ContextMenu" Value="{DynamicResource ContextMenuForItem}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type ListViewItem}"> 
        <Grid HorizontalAlignment="Stretch"> 
         <Border x:Name="border" BorderBrush="{x:Null}" BorderThickness="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" CornerRadius="2.5"/> 
         <GridViewRowPresenter x:Name="gridrowPresenter" Content="{TemplateBinding Property=ContentControl.Content}"/> 
        </Grid> 
        <ControlTemplate.Triggers> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" TargetName="border"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="#33C1DEFF" Offset="0"/> 
             <GradientStop Color="#41A5CDFF" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
          <Setter Property="BorderBrush" TargetName="border" Value="#FF7DA2CE"/> 
         </Trigger> 
         <Trigger Property="IsSelected" Value="true"> 
          <Setter Property="BorderBrush" TargetName="border" Value="#FF7DA2CE"/> 
          <Setter Property="Background" TargetName="border"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="#97C1DEFF" Offset="0"/> 
             <GradientStop Color="#A7A5CDFF" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="true"/> 
           <Condition Property="Selector.IsSelectionActive" Value="false"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="BorderBrush" TargetName="border" Value="#FFB4B4B4"/> 
          <Setter Property="Background" TargetName="border"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
             <GradientStop Color="#7FE5E5E5" Offset="0"/> 
             <GradientStop Color="#B2CCCCCC" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter> 
         </MultiTrigger> 
         <Trigger Property="IsEnabled" Value="false"> 
          <Setter Property="Foreground" Value="{StaticResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
         </Trigger> 
        </ControlTemplate.Triggers> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

어떻게 해결할 수 있습니까?

답변

0

ListViewItem의 기본값 ControlTemplate을 사용자 정의로 바꾸 었으며 그 정의에 마우스를 올려 놓았을 때 항목을 강조 표시 한 요소가 포함되지 않은 것이 문제입니다.

해결책은 간단하다 ... 기본 ControlTemplate를 찾아 ... 난 당신이 적어도 원래 ControlTemplate에서 VisualStateManager.VisualStateGroups 요소를 필요, 추측하고있어 누락 된 요소와 ControlTemplate를 업데이트합니다.

ListViewItemControlTemplate에 대한 자세한 내용은 MSDN의 ListView Styles and Templates 페이지에서 확인할 수 있습니다. 당신이 어떤 컨트롤의 ControlTemplate의 일부를 대체하려는 경우


UPDATE >>>

야, 당신은 이런 식으로 작업을 수행합니다

첫째, 전체 기본 ControlTemplate 복사 new ControlTemplate이 제대로 작동하는지 확인하십시오. 그런 다음 만 입력하면 내용을 조정하면서 몇 가지 사항을 추가하거나 제거 할 때마다 해당 내용이 계속 예상대로 작동하는지 확인할 수 있습니까?

이것은 오류를 방지하는 방법이며 사용자 쪽에서 엉성한 작업만으로 작동을 멈출 수 있습니다.

+0

피할 수도 있음 –