2009-06-12 5 views
1

J'ai un contrôle qui hérite de TreeView (System.Windows.Controls.TreeView de WPF Framework) et il implémente un GridViewColumnCollection pour afficher les colonnes à côté de l'arborescence. Cependant maintenant je dois mettre en œuvre AllowColumnReorder au cas où nous ne voulons pas que les utilisateurs réorganisent les colonnes, comment puis-je y parvenir? Voici le code pour le TreeView:Implémentation de AllowColumnReorder

public class TreeListView : TreeView 
    { 
     protected override DependencyObject GetContainerForItemOverride() 
     { 
      return new TreeListViewItem(); 
     } 

     protected override bool IsItemItsOwnContainerOverride(object item) 
     { 
      return item is TreeListViewItem; 
     } 

     #region Public Properties 

     private GridViewColumnCollection _columns; 

     public GridViewColumnCollection Columns 
     { 
      get 
      { 
       if (_columns == null) 
       { 
        _columns = new GridViewColumnCollection(); 
       } 

       return _columns; 
      } 
     } 

     public bool AllowColumnReorder { get; set; } 

     #endregion 
    } 

Merci!

Répondre

1

Trouvé la solution. Ce n'est pas exactement dans la mise en œuvre de la classe, mais la manière est présentée dans le XAML avec le GridViewHeaderRowPresenter.AllowsColumnReorder:

<Style TargetType="{x:Type controls:TreeListView}"> 
      <Setter Property="Template"> 
       <Setter.Value> 
        <ControlTemplate TargetType="{x:Type controls:TreeListView}"> 
         <Border BorderBrush="{TemplateBinding BorderBrush}" 
        BorderThickness="{TemplateBinding BorderThickness}"> 
          <DockPanel> 
           <GridViewHeaderRowPresenter AllowsColumnReorder="False" Columns="{Binding Path=Columns,RelativeSource={RelativeSource TemplatedParent}}" 
              DockPanel.Dock="Top"/> 
           <ItemsPresenter/> 
          </DockPanel> 
         </Border> 
        </ControlTemplate> 
       </Setter.Value> 
      </Setter> 
     </Style> 
0

La détermination de si oui ou non les colonnes devrait permettre le tri doit être prise par le contrôle qui est en fait afficher les données de la colonne. Par exemple, si vous utilisez un GridView pour afficher les données trouvées dans GridViewColumnCollection, alors vous voudriez définir la propriété AllowSorting de GridView à la valeur trouvée dans votre propriété AllowColumnReorder.

+0

Ouais, la chose est en ce moment je n'ai pas le temps de mettre la propriété dans le contrôle réel, je prévois de le faire plus tard si, pour l'instant la solution a fonctionné. Merci. – Carlo