Bất cứ ai biết nơi tôi có thể có được một điều khiển giống như Multi-column Tree-View trong WPF?Multi-column Tree-View trong WPF
Trả lời
Tôi đã triển khai điều này dựa trên bài đăng blog cũ here. Nhưng nếu tôi nhớ đúng, tôi đã phải làm một số công việc thủ công để có được những thứ để làm việc đúng. Cụ thể với các thanh cuộn.
Nhưng điều đó sẽ cho bạn một khởi đầu tốt.
Có một bài viết trên CodeProject có thể giúp:
http://www.codeproject.com/KB/WPF/TreeListView.aspx
Có khá một vài khác hữu ích articles có về WPF TreeView.
SharpDevelop có ListView
lớp con được gọi là SharpTreeView
làm những gì bạn đang tìm kiếm.
Bạn có thể thấy một ví dụ sống tầm kiểm soát này trong cửa sổ "Watch" SharpDevelop của:
XAML được sử dụng trong cửa sổ Watch (như trong 5.1.0 beta):
<tv:SharpGridView x:Key="variableGridView" AllowsColumnReorder="False">
<GridView.Columns>
<GridViewColumn Header="{core:Localize MainWindow.Windows.Debug.LocalVariables.NameColumn}" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<tv:SharpTreeNodeView />
<local:AutoCompleteTextBox x:Name="name" Margin="-6 0 0 0" MinWidth="100" Text="{Binding Node.Name}" IsEditable="{Binding Node.CanSetName}">
<local:AutoCompleteTextBox.ContextMenu>
<MultiBinding Converter="{StaticResource menuBuilder}">
<Binding Path="Node.ContextMenuAddInTreeEntry" />
<Binding Path="Node" />
</MultiBinding>
</local:AutoCompleteTextBox.ContextMenu>
</local:AutoCompleteTextBox>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="{core:Localize MainWindow.Windows.Debug.LocalVariables.ValueColumn}" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:AutoCompleteTextBox
MinWidth="100"
Text="{Binding Node.Value}"
IsEditable="{Binding Node.CanSetValue}">
<local:AutoCompleteTextBox.ContextMenu>
<MultiBinding Converter="{StaticResource menuBuilder}">
<Binding Path="Node.ContextMenuAddInTreeEntry" />
<Binding Path="Node" />
</MultiBinding>
</local:AutoCompleteTextBox.ContextMenu>
</local:AutoCompleteTextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="{core:Localize MainWindow.Windows.Debug.LocalVariables.TypeColumn}" Width="200">
<GridViewColumn.CellTemplate>
<DataTemplate>
<local:AutoCompleteTextBox MinWidth="100" Text="{Binding Node.Type}" IsEditable="False">
<local:AutoCompleteTextBox.ContextMenu>
<MultiBinding Converter="{StaticResource menuBuilder}">
<Binding Path="Node.ContextMenuAddInTreeEntry" />
<Binding Path="Node" />
</MultiBinding>
</local:AutoCompleteTextBox.ContextMenu>
</local:AutoCompleteTextBox>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</tv:SharpGridView>
Tài nguyên được đặt thành thuộc tính Chế độ xem của điều khiển SharpTreeView.
Ảnh chụp màn hình đẹp, nhưng nó được sử dụng như thế nào? Mẫu mã của bạn dường như hiển thị định nghĩa 'tv: SharpTreeView.View', nhưng phần còn lại của bố cục' tv: SharpTreeView' bị thiếu. Làm thế nào nó hoạt động cho ai đó có thể sử dụng tiêu chuẩn WPF 'TreeView'? – ygoe
Nó không hoạt động. Đối tượng không xác định 'cục bộ: AutoCompleteTextBox' –
@StasBZ Mã chỉ là một ví dụ, không được sao chép và dán một cách mù quáng. ['AutoCompleteTextBox'] (https://github.com/icsharpcode/SharpDevelop/blob/02364cb0b7e343cc99763ee72b1dd689f04dfc35/src/AddIns/Debugger/Debugger.AddIn/Pads/AutoCompleteTextBox.cs) là điều khiển người dùng được định nghĩa trong SharpDevelop. –
Nếu bạn không cần tiêu đề cột, điều này khá dễ dàng. Bạn chỉ có thể cung cấp mẫu vùng chứa mục, thêm cột lưới chiều rộng cố định ở bên phải và liên kết cột đó với dữ liệu có liên quan của mặt hàng của bạn.
Các container hàng mặc định cho một TreeView có một mạng lưới định nghĩa là (với một số ý kiến bổ sung):
<Grid>
<Grid.ColumnDefinitions>
<!--Expander--><ColumnDefinition MinWidth="19" Width="Auto"/>
<!--Item--><ColumnDefinition Width="Auto"/>
<!--Overflow--><ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<!--Current Item--><RowDefinition Height="Auto"/>
<!--Sub-items--><RowDefinition/>
</Grid.RowDefinitions>
<ToggleButton x:Name="Expander" ClickMode="Press" IsChecked="{Binding IsExpanded, RelativeSource={RelativeSource TemplatedParent}}" Style="{StaticResource ExpandCollapseToggleStyle}"/>
<Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Grid.Column="1" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
<ContentPresenter x:Name="PART_Header" ContentSource="Header" HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"/>
</Border>
<ItemsPresenter x:Name="ItemsHost" Grid.ColumnSpan="2" Grid.Column="1" Grid.Row="1"/>
</Grid>
Vì vậy, chỉ cần mở rộng mạng lưới này để chứa các cột có thể dự đoán chiều rộng sang bên phải và bạn sẽ có cột.
- Thêm định nghĩa cột cho cột mới, làm cho nó tự động kích thước
- Cập nhật khoảng cột của "ItemsHost" để span thêm cột
- Thêm một điều khiển có thể dự đoán chiều rộng tới cột rằng:
các phần bị ảnh hưởng:
<Grid>
...
<ColumnDefinition Width="Auto"/>
...
<ItemsPresenter ... Grid.ColumnSpan="3" ... />
...
<Border Grid.Column="3"><!--Add column data here--></Border>
...
</Grid>
Nếu biên giới gia tăng là chiều rộng tương tự cho tất cả các hàng, bạn sẽ có một xem có cảm giác như một lượt xem với các cột. Điều này rõ ràng sẽ không mở rộng tốt, nhưng nếu chỉ cần một giải pháp nhanh chóng và bẩn, bạn sẽ có thể làm điều này trong pha trộn trong một vài phút mà không cần thêm phụ thuộc cho điều khiển/thư viện bên ngoài.
Nhu cầu của chúng tôi tăng nhanh và chúng tôi đã thêm lưới có nhãn cột bên ngoài cây và dữ liệu chiều rộng của cột ở đó với chiều rộng của "cột" này [thực sự là độ rộng của điều khiển spanning trong các cột được đề cập sử dụng cột có kích thước tự động]. Nó hoạt động, đó là tất cả những gì tôi sẽ nói trong phòng thủ của nó.
Cách tiếp cận này cũng có thể được thực hiện trong mẫu mục được tạo thay vì mục chứa nếu bạn không nhớ (hoặc muốn) hộp chọn (đường viền "Bd") mở rộng trên tất cả các cột.
- 1. treeview Multibinding trong WPF
- 2. AutoExpand treeview trong WPF
- 3. WPF: Tùy chỉnh + - trong TreeView
- 4. WPF TreeView Binding
- 5. Dữ liệu nhóm trong WPF treeview
- 6. Nhóm đối tượng con trong WPF TreeView
- 7. VBA listbox multicolumn thêm
- 8. WPF TreeView: Phương thức ExpandAll() ở đâu
- 9. Tiêu đề cột cho một TreeView WPF
- 10. WPF TreeView rò rỉ mục đã chọn
- 11. WPF: Ảo hóa TreeView không hoạt động
- 12. WPF TreeView với nhiều lựa chọn
- 13. Latex - \ multicolumn trong môi trường căn chỉnh *
- 14. Các dòng giữa các nút trong WPF TreeView
- 15. Chọn một nút trong TreeView ảo hóa với WPF
- 16. WPF giữ một danh sách TreeView được sắp xếp
- 17. Lưu trạng thái WPF TreeView khi tải lại dữ liệu
- 18. Làm thế nào để flatten một TreeView WPF
- 19. Có HierarchicalDataTemplates trong một TreeView
- 20. Tổng số cho MultiColumn trong Báo cáo tinh thể
- 21. Tải chậm TreeView trong .NET
- 22. Ảo hóa TreeView
- 23. điền vào số treeview từ danh sách đường dẫn tệp trong wpf
- 24. Biểu tượng Ràng buộc phụ thuộc vào Enum trong WPF TreeView
- 25. WPF: Ràng buộc TreeView trong MVVM cách từng bước hướng dẫn
- 26. Làm cách nào để thêm biểu tượng bên cạnh các nút trong TreeView WPF?
- 27. Xóa TreeView
- 28. Android Treeview
- 29. WPF: Xử lý chỉnh sửa thứ bậc dữ liệu/TreeView ~ DataGrid lai
- 30. Làm cách nào để dữ liệu liên kết dữ liệu phân cấp với TreeView WPF?
Tôi đã sử dụng giải pháp này, nó hoạt động tốt. – Dylan