2009-06-18 2 views
0

Я использую многоколоночном управление TreeView, который я нашел здесь http://www.codeproject.com/KB/WPF/wpf_treelistview_control.aspxAutosizing шаблонного столбец в ListView на основе Multicolumn TreeView

Первого столбец в этом элементе управления, который состоит из моделируемого управления представлением дерева должно быть autosized, когда узел расширяется/сворачивается.

Любая помощь?

Пример XAML

<UserControl x:Class="ListViewAsTreeView.XmlTree" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:local="clr-namespace:ListViewAsTreeView"  
xmlns:tree="clr-namespace:Aga.Controls.Tree;assembly=Aga.Controls"> 

<UserControl.Resources>   
    <local:RegImageConverter x:Key="RegImageConverter"/> 
    <local:ComboList x:Key="MyComboSource"/>   
</UserControl.Resources> 

<StackPanel> 
    <tree:TreeList Name="_tree" local:DragAndDrop.DropEnabled="true" 
        MinHeight="40" 
        IsSynchronizedWithCurrentItem="True"> 
     <tree:TreeList.View> 
      <GridView> 
       <GridView.Columns> 
        <GridViewColumn Header="Name">      
         <GridViewColumn.CellTemplate>     
          <DataTemplate> 
           <StackPanel 
            Orientation="Horizontal"> 
            <tree:RowExpander/> 
            <Image 
             Source="{Binding 
             Converter={StaticResource RegImageConverter}}" Margin="0, 0, 5, 0"/> 
            <TextBlock 
             Text="{Binding Name}">          
            </TextBlock> 
           </StackPanel> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 

        <GridViewColumn Header="Type" Width="Auto" 
            DisplayMemberBinding="{Binding Kind, UpdateSourceTrigger=PropertyChanged}"/> 
        <GridViewColumn Header="Data" Width="Auto" 
            DisplayMemberBinding="{Binding Data, UpdateSourceTrigger=PropertyChanged}"/> 
        <GridViewColumn Header="ComboSample" Width="Auto"> 
         <GridViewColumn.CellTemplate> 
          <DataTemplate> 
           <ComboBox Name="MyComboBox" ItemsSource="{StaticResource MyComboSource}" 
              IsEditable="True" IsEnabled="True" 
              Text="{Binding Name}"> 
           </ComboBox> 
          </DataTemplate> 
         </GridViewColumn.CellTemplate> 
        </GridViewColumn> 
       </GridView.Columns> 
      </GridView> 
     </tree:TreeList.View> 
    </tree:TreeList> 

    <ListBox local:DragAndDrop.DragEnabled="true"> 
     <ListBoxItem>Item 1</ListBoxItem> 
     <ListBoxItem>Item 2</ListBoxItem> 
     <ListBoxItem>Item 3</ListBoxItem> 
    </ListBox> 
</StackPanel> 

Спасибо, Jithu

ответ

0

Попробуйте определения отдельного DataGrid и заселить и с элементом, который содержит длинные значения столбцов. Затем DataBind the Aga.Controls TreeView шириной столбца соответствует соответствующей ширине столбца вашего DataGrid. Таким образом ширина столбца управления TreeView устанавливается на самый длинный элемент столбца. Вы всегда можете скрыть DataGrid, установив непрозрачность на ноль.

например: Предположит, что имя DataGrid является "TestDataGrid", и она имеет столбец под названием "dgNameColumn"

<GridViewColumn Header="Name" **Width="{Binding ElementName=dgNameColumn, Path=ActualWidth}"**>      
        <GridViewColumn.CellTemplate>     
         <DataTemplate> 
          <StackPanel 
           Orientation="Horizontal"> 
           <tree:RowExpander/> 
           <Image 
            Source="{Binding 
            Converter={StaticResource RegImageConverter}}" Margin="0, 0, 5, 0"/> 
           <TextBlock 
            Text="{Binding Name}">          
           </TextBlock> 
          </StackPanel> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 

Надеется, что это помогает.

1
 Output : 
     Parent   Col1 Col2 Col3 
     | 
     |____ Child Data1 Data2 Data3 
     | 
     |____ Child2 Data1 Data2 Data3 

http://www.go-mono.com/mono-downloads/download.html .. Скачать Gtksharp для ур операционной системы и добавить refrence из этих DLL в Visual Studio АТК-sharp.dll, GDK-sharp.dll, бойкий-sharp.dll, GTK-sharp.dll и использования использование Gtk; ... U получит TreeView

public class TreeViewExample 
     { 
public static void Main() 
{ 
    Gtk.Application.Init(); 
    new TreeViewExample(); 
    Gtk.Application.Run(); 
} 

public TreeViewExample() 
{ 
    Gtk.Window window = new Gtk.Window("TreeView Example"); 
    window.SetSizeRequest(500, 200); 

    Gtk.TreeView tree = new Gtk.TreeView(); 
    window.Add(tree); 

    Gtk.TreeViewColumn Parent = new Gtk.TreeViewColumn(); 
    Parent.Title = "Parent"; 
    Gtk.CellRendererText Parent1 = new Gtk.CellRendererText(); 
    Parent.PackStart(Parent1, true); 

    Gtk.TreeViewColumn ChildColoumn1 = new Gtk.TreeViewColumn(); 
    ChildColoumn1.Title = "Column 1";   
    Gtk.CellRendererText Child1 = new Gtk.CellRendererText(); 
    ChildColoumn1.PackStart(Child1, true); 

    Gtk.TreeViewColumn ChildColumn2 = new Gtk.TreeViewColumn(); 
    ChildColumn2.Title = "Column 2"; 
    Gtk.CellRendererText Child2 = new Gtk.CellRendererText(); 
    ChildColumn2.PackStart(Child2, true); 

    tree.AppendColumn(Parent); 
    tree.AppendColumn(ChildColoumn1); 
    tree.AppendColumn(ChildColumn2); 

    Parent.AddAttribute(Parent1, "text", 0); 
    ChildColoumn1.AddAttribute(Child1, "text", 1); 
    ChildColumn2.AddAttribute(Child2, "text", 2); 

    Gtk.TreeStore Tree = new Gtk.TreeStore(typeof(string), typeof(string), typeof(string)); 
    Gtk.TreeIter iter = Tree.AppendValues("Parent1"); 
    Tree.AppendValues(iter, "Child1", "Node 1"); 

    iter = Tree.AppendValues("Parent2"); 
    Tree.AppendValues(iter, "Child1", "Node 1","Node 2");   

    tree.Model = Tree; 
    window.ShowAll(); 
} 
} 
Смежные вопросы