2009-06-18 17 views
0

我使用,我发现这里http://www.codeproject.com/KB/WPF/wpf_treelistview_control.aspx自动调整大小在ListView模板基于列的多列树状

在此控制它由一个模拟的树视图控件的第一列需要多光柱TreeView控件要当一个节点自动调整大小展开/折叠。

任何帮助?

样品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将Aga.Controls Treeview的列宽添加到DataGrid的相应列宽。这样TreeView控件的列宽被设置为最长的列项目。您始终可以通过将不透明度设置为零来隐藏DataGrid。

e.g:假设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乌拉圭回合操作系统,并添加这些DLL在Visual Studio ATK-sharp.dll,GDK-sharp.dll,能说会道,sharp.dll,GTK的sharp.dll和使用refrence使用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(); 
} 
}