2013-04-05 3 views
3

하나의 응용 프로그램을 쓰고 있고 항목별로 전체 행 아래에 배경을 설정해야합니다. here에서 몇 가지 영감을 찾았지만 템플릿에서 테두리 배경 값을 얻는 방법을 알 수 없습니다. (문제는 좀 더 복잡합니다.)전체 행에 걸쳐 WPF 트리보기 항목 배경

내 문제는 treeview에 두 가지 유형의 "데이터" 폴더). 사용자는 파일 및 폴더에서 배경을 수정할 수 있습니다.

지금 당장 나는 textblock에 대한 배경 지식을 가지고 있지만, 끔찍한 것처럼 보이고 전체 행 위에 배경을 갖고 싶습니다 (훨씬 더 좋아 보일 것입니다).
img1

을하지만 내가해야 할 것은 :

지금 그렇게 보인다 내가 테두리 배경의 값을 변경하면, 내가 모든 항목을 (논리적으로) 변경
img2

. 그래서 난 정말 textblock 배경으로 작업해야 할 것 같아요,하지만 전 행 (스트레치는 단지 라인의 끝에 그것을 확산하기 때문에 해결책이 아니라 이전에 그 공백이 아니라) 전체 행에 퍼질 도달 할 수 없습니다.

고마워.

편집 : 여기에 XAML :

<ResourceDictionary 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="clr-namespace:treeView"> 
<!-- TREEVIEW --> 
    <Style x:Key="ExpandCollapseToggleStyle" TargetType="ToggleButton"> 
     <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="Red" 
      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="Black" 
       StrokeDashArray="1 2" 
       Opacity="0"/> 
        </Border> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 


    <Style x:Key="{x:Type TreeViewItem}" 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="{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}"/> 
     <Setter Property="FocusVisualStyle" Value="{StaticResource TreeViewItemFocusVisual}"/> 
     <Setter Property="Template"> 
      <Setter.Value> 
       <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
        <ControlTemplate.Resources> 
         <local:LeftMarginMultiplierConverter Length="19" x:Key="lengthConverter" /> 
        </ControlTemplate.Resources> 
        <StackPanel> 
         <Border x:Name="Bd" 
          Background="{TemplateBinding Background}" 
          BorderBrush="{TemplateBinding BorderBrush}" 
          BorderThickness="{TemplateBinding BorderThickness}" 
          Padding="{TemplateBinding Padding}"> 
          <Grid Margin="{Binding Converter={StaticResource lengthConverter}, RelativeSource={RelativeSource TemplatedParent}}"> 
           <Grid.ColumnDefinitions> 
            <ColumnDefinition Width="19" /> 
            <ColumnDefinition/> 
           </Grid.ColumnDefinitions> 
           <ToggleButton Grid.Column="1" x:Name="Expander" 
            Style="{StaticResource ExpandCollapseToggleStyle}" 
            IsChecked="{Binding Path=IsExpanded, 
               RelativeSource={RelativeSource TemplatedParent}}" 
            ClickMode="Press"/> 
           <ContentPresenter x:Name="PART_Header" Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ContentSource="Header" /> 
          </Grid> 
         </Border> 
         <ItemsPresenter x:Name="ItemsHost" /> 
        </StackPanel> 
        <ControlTemplate.Triggers> 
         <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 TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/> 
          <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
         </Trigger> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="true"/> 
           <Condition Property="IsSelectionActive" Value="false"/> 
          </MultiTrigger.Conditions> 
          <Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/> 
          <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> 
</ResourceDictionary> 
+0

XAML 코드를 작성할 수 있습니까? –

+0

XAML 코드가 추가되었습니다. – piggy

답변

-1

사용 스눕 수정하려고하는 시각적 트리를 이해합니다. 이렇게하면 수정해야 할 항목을 실제로 알기까지 2-3 분이 걸릴 것입니다. (구글)

내 좋은 방법은이 같은 것을 사용할 필요가있다 :

<TreeView> 
<TreeView.ItemContainerStyle> 
<Style BasedOn="{StaticResource {x:Type TreeViewItem}}" TargetType="TreeViewItem"> 
        <Setter Property="Background" Value="Purple" /> 
</TreeView.ItemContainerStyle> 
</TreeView> 

당신은 또한 당신이 항목에 따라 배경 콜로을 원하는 경우 트리거를 추가해야합니다.

+0

이 답변처럼 보입니다. 자세한 내용을 확인해보십시오 .i 답변을 표시 할 것입니다. 나는 곧 추측합니다 .x! – piggy

+0

그것은 나에게 약간의 변화를 주었지만 문제는 코드에 itemContainterStyle을 넣었을 때 첫 번째 항목이 "보라색"입니다. – piggy

+0

@piggy이 코드가 제대로 작동하지 않을지 확신하지 못합니다. 배경 값을 뷰 모델에 바인딩 할 수 있습니까? 나는 이것을 시도하지 않았으므로 이것이 효과가 있을지 확신하지 못한다. –

2

해결책 주셔서 감사합니다. 여기에 지금까지 미리보기 한 적이 있습니다 무슨 : 당신은 질문이있는 경우

preview

  <TreeView Grid.Row="1" Name="treeView" Margin="5"> 
      <TreeView.ItemContainerStyle> 
       <Style TargetType="{x:Type TreeViewItem}"> 
        <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
        <Setter Property="KeyboardNavigation.AcceptsReturn" Value="True" /> 
        <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
        <!-- Style for the selected item --> 
        <Setter Property="BorderThickness" Value="1"/> 
        <Setter Property="Template"> 
         <Setter.Value> 
          <ControlTemplate TargetType="{x:Type TreeViewItem}"> 
           <ControlTemplate.Resources> 
            <Conv:LeftMarginMultiplierConverter Length="19" x:Key="lengthConverter" /> 
           </ControlTemplate.Resources> 
           <StackPanel> 
            <Border 
             x:Name="Bd" 
             Background="{TemplateBinding Background}" 
             BorderBrush="{TemplateBinding BorderBrush}" 
             BorderThickness="{TemplateBinding BorderThickness}" 
             Padding="{TemplateBinding Padding}"> 
             <Grid Margin="{Binding Converter={StaticResource lengthConverter}, RelativeSource={RelativeSource TemplatedParent}}"> 
              <Grid.ColumnDefinitions> 
               <ColumnDefinition Width="19" /> 
               <ColumnDefinition/> 
              </Grid.ColumnDefinitions> 
              <ToggleButton 
               Grid.Column="0" 
               x:Name="Expander" 
               Style="{StaticResource ExpandCollapseToggleStyle}" 
               IsChecked="{Binding Path=IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" 
               ClickMode="Press"/> 
              <ContentPresenter x:Name="PART_Header" Grid.Column="1" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" ContentSource="Header" /> 
             </Grid> 
            </Border> 
            <ItemsPresenter x:Name="ItemsHost" /> 
           </StackPanel> 
           <ControlTemplate.Triggers> 
            <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 TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.HighlightBrushKey}}"/>--> 
             <Setter TargetName="Bd" Property="Background" Value="#FFF7D280"/> 
             <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.HighlightTextBrushKey}}"/> 
            </Trigger> 
            <MultiTrigger> 
             <MultiTrigger.Conditions> 
              <Condition Property="IsSelected" Value="true"/> 
              <Condition Property="IsSelectionActive" Value="false"/> 
             </MultiTrigger.Conditions> 
             <!--<Setter TargetName="Bd" Property="Background" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>--> 
             <Setter TargetName="Bd" Property="Background" Value="#FFDADADA"/> 
             <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.Triggers> 
         <!-- Selected and has focus --> 
         <Trigger Property="IsSelected" Value="True"> 
          <Setter Property="BorderBrush" Value="{StaticResource HT_Background_Orange}"/> 
         </Trigger> 
         <!-- Mouse over --> 
         <Trigger Property="IsMouseOver" Value="True"> 
          <Setter Property="Background" Value="#FFFDE8BA"/> 
          <!--<Setter Property="Background"> 
           <Setter.Value> 
            <LinearGradientBrush EndPoint="0,1" StartPoint="0,0"> 
             <GradientStop Color="#FFFAFBFD" Offset="0"/> 
             <GradientStop Color="#fadfa3" Offset="1"/> 
            </LinearGradientBrush> 
           </Setter.Value> 
          </Setter>--> 
          <Setter Property="BorderBrush" Value="#f59246"/> 
         </Trigger> 
         <!-- Selected but does not have the focus --> 
         <MultiTrigger> 
          <MultiTrigger.Conditions> 
           <Condition Property="IsSelected" Value="True"/> 
           <Condition Property="IsSelectionActive" Value="False"/> 
          </MultiTrigger.Conditions> 
          <Setter Property="BorderBrush" Value="#f59246"/> 
         </MultiTrigger> 
        </Style.Triggers> 
        <Style.Resources> 
         <Style TargetType="Border"> 
          <Setter Property="CornerRadius" Value="0"/> 
         </Style> 
        </Style.Resources> 
       </Style> 
      </TreeView.ItemContainerStyle> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate DataType="{x:Type local:FileSystemObjectInfo}" ItemsSource="{Binding Path=Children}"> 
        <StackPanel Orientation="Horizontal"> 
         <Image 
          Source="{Binding Path=ImageSource, UpdateSourceTrigger=PropertyChanged}" 
          Margin="0,1,8,1" 
          Height="24" 
          Width="24"/> 
         <TextBlock 
          Text="{Binding Path=FileSystemInfo.Name}" 
          VerticalAlignment="Center"/> 
        </StackPanel> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
      <TreeView.Resources> 

       <!-- Brushes for the selected item --> 
       <LinearGradientBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" EndPoint="0,1" StartPoint="0,0"> 
        <GradientStop Color="#FFFDF2DA" Offset="0"/> 
        <GradientStop Color="#FFF7D280" Offset="1"/> 
       </LinearGradientBrush> 
       <LinearGradientBrush x:Key="{x:Static SystemColors.ControlBrushKey}" EndPoint="0,1" StartPoint="0,0"> 
        <GradientStop Color="White" Offset="0"/> 
        <GradientStop Color="#FFE2E2E2" Offset="1"/> 
       </LinearGradientBrush> 
       <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" /> 
       <SolidColorBrush x:Key="{x:Static SystemColors.ControlTextBrushKey}" Color="Black" /> 
      </TreeView.Resources> 
     </TreeView> 

을 알려주세요!

감사합니다.

관련 문제