2009-10-06 5 views
1

Quelqu'un peut-il me dire comment je peux modéliser un contrôle treeview afin qu'il ne ressemble pas à un arbre? Fondamentalement, je veux supprimer les retraits à différents niveaux ainsi que le +/- qui permettent l'expansion et l'effondrement.Puis-je avoir un Treeview sans l'arborescence?

L'exigence réelle est que j'ai un modèle de données hiérarchique qui est lié à une collection d'objets qui est de nature récursive. Et je veux afficher ces objets à l'écran de manière plate. La meilleure solution consiste à utiliser le modèle de données hiérarchique avec un contrôle d'articles. Mais malheureusement, je crois que le itemscontrol ne comprend pas les modèles hiérarchiques. Je suis donc obligé d'utiliser un contrôle treeview et de supprimer toutes les fonctionnalités "tree".

Toutes les suggestions seront utiles puissant ..

+0

Metacomment: une étiquette WPF serait approprié. –

Répondre

2

Vous devez modifier le modèle du TreeViewItem. Je l'ai déjà fait pour vous, il suffit de copier/coller le code ci-dessous dans votre fenêtre. Bien que je vous recommande fortement d'étudier ControlTemplates et comment les modifier depuis si vous allez utiliser WPF. C'est TRÈS utile.

Ici, vous allez:

<Window.Resources> 
     <SolidColorBrush x:Key="WindowBackgroundBrush" Color="#FFF" /> 
     <SolidColorBrush x:Key="SolidBorderBrush" Color="#888" /> 
     <SolidColorBrush x:Key="GlyphBrush" Color="#444" /> 

     <!-- TreeView -->   
     <Style x:Key="{x:Type TreeView}" TargetType="TreeView"> 
      <Setter Property="OverridesDefaultStyle" Value="True" /> 
      <Setter Property="SnapsToDevicePixels" Value="True" /> 
      <Setter Property="ScrollViewer.HorizontalScrollBarVisibility" Value="Auto"/> 
      <Setter Property="ScrollViewer.VerticalScrollBarVisibility" Value="Auto"/> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="TreeView"> 
         <Border 
          Name="Border" 
          CornerRadius="1" 
          Background="{StaticResource WindowBackgroundBrush}" 
          BorderBrush="{StaticResource SolidBorderBrush}" 
          BorderThickness="1"> 
          <ScrollViewer 
           Focusable="False" 
           CanContentScroll="False" 
           Padding="4"> 
           <ItemsPresenter/> 
          </ScrollViewer> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 

     <!-- TreeViewItem --> 
     <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}"> 
         <Grid> 
          <Grid.ColumnDefinitions> 
           <ColumnDefinition Width="Auto"/> 
          </Grid.ColumnDefinitions> 
          <Grid.RowDefinitions> 
           <RowDefinition Height="Auto"/> 
           <RowDefinition/> 
          </Grid.RowDefinitions> 
          <Border Name="Bd" 
           Grid.Column="0" 
           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" Visibility="Visible" 
           Grid.Row="1" 
           Grid.Column="0"/> 
         </Grid> 
         <ControlTemplate.Triggers> 
          <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> 
    </Window.Resources> 

    <Grid> 
     <TreeView> 
      <TreeViewItem Header="Node 1"> 
       <TreeViewItem Header="Node 1.1"> 
        <TreeViewItem Header="Node 1.1.1" /> 
       </TreeViewItem> 
      </TreeViewItem> 
      <TreeViewItem Header="Node 2"> 
       <TreeViewItem Header="Node 2.1"> 
        <TreeViewItem Header="Node 2.1.1" /> 
       </TreeViewItem> 
       <TreeViewItem Header="Node 2.2"> 
        <TreeViewItem Header="Node 2.2.1" /> 
       </TreeViewItem> 
      </TreeViewItem> 
     </TreeView> 
    </Grid> 
</Window> 
+0

homme que vous avez résolu mon problème .. mercisssssssssssssss –

+0

@Muhammad Adnan: haha ​​toujours heureux que je pourrais aider! – Carlo

+0

Mais de cette façon, je perds la fonctionnalité expand/collapse de treeveiw ... comment puis-je avoir dans ce cas ... –

1

Vous pourriez probablement faire avec un modèle, mais si les données n'a pas besoin d'être dans une hiérarchie, alors il est plus logique de l'aplatir dans le ViewModel - peut-être en utilisant AutoMapper.

2

Vous pouvez consulter this et this article qui montre comment changer complètement le rendu d'une vue arborescente:

alt text

Questions connexes