2009-06-18 7 views
0

ich das mehrspaltigen TreeView-Steuerelement bin mit dem ich hier http://www.codeproject.com/KB/WPF/wpf_treelistview_control.aspx gefundenAutosizing Templat Spalte in einem Listview-basierten Mehrspaltige treeview

Die erste Spalte in dieser Steuerung, die, wenn ein Knoten autosized werden muss eine simulierten Strukturansicht besteht ist erweitert/kollabiert.

Irgendwelche Hilfe?

Beispiel 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> 

Danke, Jithu

Antwort

0

Versuchen Sie einen separaten Datenraster zu definieren und mit einem Element füllen, die längste Spaltenwerte enthält. Dann DataBind die Spaltenbreite der Aga.Controls Treeview auf die entsprechende Spaltenbreite Ihres DataGrid. Auf diese Weise wird die Spaltenbreite des TreeView-Steuerelements auf das längste Spaltenelement eingestellt. Sie können das DataGrid immer ausblenden, indem Sie die Deckkraft auf Null setzen.

z: Angenommen, das Datagrid-Name "TestDataGrid" ist, und es hat eine Spalte namens "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> 

Hoffnung, das hilft.

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

http://www.go-mono.com/mono-downloads/download.html .. Gtksharp für ur Betriebssystem herunterladen und atk-sharp.dll, gdk-sharp.dll, glib-sharp.dll, gtk-sharp.dll und Verwendung refrence diese DLL in Visual Studio hinzufügen mit Gtk; ... U erhält das 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(); 
} 
}