2017-12-08 3 views
1

나는 이것으로 끝내고있다. 지난 2 일 동안 더 좋은 부분을 인터넷 검색과 인터넷 검색으로 보냈다. 내가 mouseover 할 때 내 TreeView이 예상대로 작동하지만이 시점에서 Expander/텍스트를 넘겨 받아야 다른 배경과 테두리 브러시가 적용됩니다. 나는 이것을 없애려는 시도에 어리 석었고 아무 것도 전혀 효과가없는 것으로 보인다. 아래의 마지막 잔인한 시도는 계속 진행되고 있습니다.WPF TreeViewItem 미스테리 마우스 오버 스타일

나는 그것이 머리 위로 날아 다니는 것이 단순하다고 가정하고,이 바보 같은 양의 방아쇠가 필요 없다는 것을 알고 있습니다. 요청으로

, 여기에 스크린 샷 Issue

의 어떤 요구되는 것은 텍스트가 파란색이고 배경이 투명 위치를 볼 수있는 효과입니다. 배경 및 테두리 브러쉬 확장기를 통해

<TreeView x:Name="textureTreeView" ItemsSource="{Binding Category}" Margin="0" SelectedItemChanged="textureTreeView_SelectedItemChanged" Background="#00000000" BorderBrush="{x:Null}" Foreground="#00000000" IsTextSearchEnabled="True"> 

    <TreeView.Resources> 
     <HierarchicalDataTemplate DataType="{x:Type local1:CategoryViewModel}" ItemsSource="{Binding Children}"> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Name}" IsHitTestVisible="False"/> <!-- This eliminated the text from causing the issue --> 
      </StackPanel> 
     </HierarchicalDataTemplate> 

    </TreeView.Resources> 

    <TreeView.ItemContainerStyle> 
     <Style TargetType="{x:Type TreeViewItem}"> 
      <Setter Property="Foreground" Value="#FFA1A1A1"/> 
      <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/> 
      <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/> 
      <Setter Property="FontWeight" Value="Normal"/> 
       <Style.Triggers> 
        <Trigger Property="IsFocused" Value="True"> 
         <Setter Property="FontWeight" Value="Bold"/> 
         <Setter Property="Foreground" Value="#FFFFFFFF"/> 
        </Trigger> 

        <Trigger Property="Expander.IsMouseOver" Value="true"> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </Trigger> 

        <Trigger Property="Grid.IsMouseOver" Value="true"> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </Trigger> 
        <Trigger Property="StackPanel.IsMouseOver" Value="true"> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </Trigger> 
        <Trigger Property="TextBlock.IsMouseOver" Value="true"> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </Trigger> 
        <Trigger Property="ItemsPresenter.IsMouseOver" Value="true"> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </Trigger> 
        <Trigger Property="Path.IsMouseOver" Value="true"> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </Trigger> 
        <Trigger Property="ToggleButton.IsMouseOver" Value="true"> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </Trigger> 
        <Trigger Property="ToggleButton.IsChecked" Value="true"> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </Trigger> 

        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="IsMouseOver" Value="True"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </MultiTrigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="ToggleButton.IsMouseOver" Value="true"/> 
          <Condition Property="ToggleButton.IsChecked" Value="true"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </MultiTrigger> 
        <MultiTrigger> 
         <MultiTrigger.Conditions> 
          <Condition Property="ToggleButton.IsMouseOver" Value="true"/> 
          <Condition Property="ToggleButton.IsChecked" Value="false"/> 
         </MultiTrigger.Conditions> 
         <Setter Property="Background" Value="#00000000"/> 
         <Setter Property="BorderBrush" Value="#00000000"/> 
         <Setter Property="Foreground" Value="#FF58A6C3"/> 
        </MultiTrigger> 

       </Style.Triggers> 

      </Style> 
     </TreeView.ItemContainerStyle> 
    </TreeView> 

업데이트를 원하지 않는 경우 : 내가 정확히 무슨 일이 일어나고 있는지에 더 드릴 다운 관리했습니다 감사합니다 @ 구이의 제안에. There is an unnamed Border 이는 해당 스타일을 적용하는 pulling template properties입니다.

나는 이미 내 스타일 템플릿을 모두 제거하려고 시도했는데, 어디에서 빠져 나오고 있는지 알지 못하고 있으며, 지금 작업하고있는 중 나는 테두리 설정 자체를 처리하는 데 매우 어려움을 겪고 있습니다. 다른 스타일.

업데이트 : 나에게있어이 경계선을 스타일링에 사용할 수는 없지만 다운로드 한 컨트롤 템플릿에는 포함되지 않습니다.

+0

내가 당신의 문제를 잘 받으셨어요? MouseOver 트리거 올바르게/TreeView에 대한 예상대로 작동하지만 확장 있지? – Yvonnila

+0

달성하고자하는 것을 설명 할 수 있습니까?/예상되는 행동은 무엇입니까? – Yvonnila

+0

스크린 샷을 사용하면 도움이 될 것입니다 –

답변

0

나는 그것을 작동시켰다! 수백만 가지를 시도했지만 템플릿이나 세터가 붙지 않았습니다. 마지막으로 컨트롤 템플릿을 override 설정자를 사용하여 treeviewitem의 스타일에 직접 넣었습니다. 나는 treeviewitem의 마우스 오버를 설정하기 위해 expander 채우기 색상을 얻는 것과 관련된 작은 문제가 있지만, 이것은 큰 문제는 아닙니다. 자료에

:

페이지에서 다음
<SolidColorBrush x:Key="GlyphBrush" Color="#FFA1A1A1" /> 
<Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton"> 
    <Setter Property="Foreground" Value="#FFFFFF"/> 
    <Setter Property="Focusable" Value="False"/> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="ToggleButton"> 
       <Grid Width="15" Height="13" Background="Transparent"> 
        <Path x:Name="ExpandPath" HorizontalAlignment="Left" VerticalAlignment="Center" Margin="1,1,1,1" Fill="{StaticResource GlyphBrush}" Data="M 4 0 L 8 4 L 4 8 Z"/> 
       </Grid> 
       <ControlTemplate.Triggers> 
        <Trigger Property="IsChecked" Value="True"> 
         <Setter Property="Data" TargetName="ExpandPath" Value="M 0 4 L 8 4 L 4 8 Z"/> 
        </Trigger> 
       </ControlTemplate.Triggers> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 

</Style> 
<Style x:Key="TreeViewItemFocusVisual"> 
    <Setter Property="Control.Template"> 
     <Setter.Value> 
      <ControlTemplate> 
       <Border> 
        <Rectangle Margin="0,0,0,0" StrokeThickness="5" Stroke="#FF717171" StrokeDashArray="1 2" Opacity="0"/> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

가 :

<TreeView x:Name="textureTreeView" ItemsSource="{Binding Category}" SelectedItemChanged="textureTreeView_SelectedItemChanged" Background="#00000000" BorderBrush="{x:Null}" Foreground="#00000000" IsTextSearchEnabled="True"> 
     <TreeView.Resources> 
      <HierarchicalDataTemplate DataType="{x:Type local1:CategoryViewModel}" ItemsSource="{Binding Children}"> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Name}" IsHitTestVisible="False"/> 
       </StackPanel> 
      </HierarchicalDataTemplate> 
     </TreeView.Resources> 
     <TreeView.ItemContainerStyle> 
      <Style TargetType="{x:Type TreeViewItem}"> 
             <Setter Property="Background" Value="Transparent"/> 
        <Setter Property="HorizontalContentAlignment" Value="{Binding Path=HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
        <Setter Property="VerticalContentAlignment" Value="{Binding Path=VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/> 
        <Setter Property="Padding" Value="1,0,0,0"/> 
        <Setter Property="Foreground" Value="#FFA1A1A1"/> 
        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}"/> 
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}"/> 
        <Setter Property="FontWeight" Value="Normal"/> 
        <Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
           <Grid> 
            <Grid.ColumnDefinitions> 
             <ColumnDefinition MinWidth="19" Width="Auto"/> 
             <ColumnDefinition Width="Auto"/> 
             <ColumnDefinition Width="*"/> 
            </Grid.ColumnDefinitions> 
            <Grid.RowDefinitions> 
             <RowDefinition Height="Auto"/> 
             <RowDefinition/> 
            </Grid.RowDefinitions> 
            <ToggleButton x:Name="Expander" Style="{StaticResource ExpandCollapseToggleStyle}" IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press"/> 
            <Border Name="Bd" Grid.Column="1" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Padding="{TemplateBinding Padding}"> 
             <ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"/> 
            </Border> 
            <ItemsPresenter x:Name="ItemsHost" Grid.Row="1" Grid.Column="1" Grid.ColumnSpan="2"/> 
           </Grid> 
           <ControlTemplate.Triggers> 
            <Trigger Property="IsFocused" Value="True"> 
             <Setter Property="FontWeight" Value="Bold"/> 
             <Setter Property="Foreground" Value="#FFFFFFFF"/> 
            </Trigger> 

            <Trigger Property="IsMouseOver" Value="true"> 
             <Setter Property="Border.Background" Value="#00000000"/> 
             <Setter Property="Background" Value="#00000000"/> 
             <Setter Property="BorderBrush" Value="#00000000"/> 
             <Setter Property="Foreground" Value="#FF58A6C3"/> 
            </Trigger> 
            <Trigger Property="IsExpanded" Value="false"> 
             <Setter TargetName="ItemsHost" Property="Visibility" Value="Collapsed"/> 
            </Trigger> 
            <Trigger Property="HasItems" Value="false"> 
             <Setter TargetName="Expander" Property="Visibility" Value="Hidden"/> 
            </Trigger> 
            <MultiTrigger> 
             <MultiTrigger.Conditions> 
              <Condition Property="HasHeader" Value="false"/> 
              <Condition Property="Width" Value="Auto"/> 
             </MultiTrigger.Conditions> 
             <Setter TargetName="PART_Header" Property="MinWidth" Value="75"/> 
            </MultiTrigger> 
            <MultiTrigger> 
             <MultiTrigger.Conditions> 
              <Condition Property="HasHeader" Value="false"/> 
              <Condition Property="Height" Value="Auto"/> 
             </MultiTrigger.Conditions> 
             <Setter TargetName="PART_Header" Property="MinHeight" Value="19"/> 
            </MultiTrigger> 
            <Trigger Property="IsSelected" Value="true"> 
             <Setter Property="FontWeight" Value="Bold"/> 
             <Setter Property="Foreground" Value="#ffffffff"/> 
            </Trigger> 
            <MultiTrigger> 
             <MultiTrigger.Conditions> 
              <Condition Property="IsSelected" Value="true"/> 
              <Condition Property="IsSelectionActive" Value="false"/> 
             </MultiTrigger.Conditions> 
             <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
            </MultiTrigger> 
            <Trigger Property="IsEnabled" Value="false"> 
             <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/> 
            </Trigger> 
           </ControlTemplate.Triggers> 
          </ControlTemplate> 
         </Setter.Value> 
        </Setter> 
       </Style> 
     </TreeView.ItemContainerStyle> 
    </TreeView>