Các TreeView
xử lý việc mở rộng một TreeViewItem
với chuột bằng cách gắn ToggleButton.IsChecked
-TreeViewItem.IsExpanded
trong ControlTemplate
và xử lý mở rộng với bàn phím trong một ghi đè TreeViewItem.OnKeyDown
. Vì vậy, không, nó không sử dụng lệnh trong việc thực hiện nó.
Nhưng bạn có thể thêm các lệnh của riêng mình mà không cần nỗ lực nhiều. Trong ví dụ này, tôi đã thêm một hành vi để một TreeView
để nó đáp ứng các tiêu chuẩn Open
và Close
ứng dụng lệnh:
<DockPanel>
<Menu DockPanel.Dock="Top">
<MenuItem Header="Open" CommandTarget="{Binding ElementName=treeView1}" Command="Open"/>
<MenuItem Header="Close" CommandTarget="{Binding ElementName=treeView1}" Command="Close"/>
</Menu>
<TreeView>
<i:Interaction.Behaviors>
<local:TreeViewCommandsBehavior/>
</i:Interaction.Behaviors>
<TreeViewItem Header="Root">
<TreeViewItem Header="Item1">
<TreeViewItem Header="Subitem1"/>
<TreeViewItem Header="Subitem2"/>
</TreeViewItem>
<TreeViewItem Header="Item2">
<TreeViewItem Header="Subitem3"/>
<TreeViewItem Header="Subitem4"/>
</TreeViewItem>
</TreeViewItem>
</TreeView>
</DockPanel>
và đây là hành vi mà làm cho rằng công việc:
public class TreeViewCommandsBehavior : Behavior<TreeView>
{
private TreeViewItem selectedTreeViewItem;
protected override void OnAttached()
{
AssociatedObject.AddHandler(TreeViewItem.SelectedEvent, new RoutedEventHandler(TreeViewItem_Selected));
AssociatedObject.CommandBindings.Add(new CommandBinding(ApplicationCommands.Open, CommandExecuted));
AssociatedObject.CommandBindings.Add(new CommandBinding(ApplicationCommands.Close, CommandExecuted));
}
private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
{
selectedTreeViewItem = e.OriginalSource as TreeViewItem;
}
private void CommandExecuted(object sender, ExecutedRoutedEventArgs e)
{
bool expand = e.Command == ApplicationCommands.Open;
if (selectedTreeViewItem != null)
selectedTreeViewItem.IsExpanded = expand;
}
}
Nếu bạn không quen với hành vi, trước tiên hãy thêm không gian tên này:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
và thêm tham chiếu tương ứng vào thư mục của bạn ct.
Nguồn
2011-01-19 06:53:14
Lưu ý rằng lắp ráp System.Windows.Interactivity không phải là một phần của bản phân phối thời gian chạy .NET 4.0; nó có sẵn trong phân phối lại của Microsoft Expression Blend SDK. – dthorpe
Bằng cách nào đó, thực tế đó đã lảng tránh tôi, có lẽ vì tên của hội đồng. Mặc dù nó tạo ra một sự phụ thuộc vào một assembly bên ngoài, việc sử dụng các hành vi là một chiến thắng lớn bởi vì nó làm cho tính năng có thể tái sử dụng mà không cần liên quan đến bất kỳ code-behind nào. Cảm ơn bạn đã chỉ ra điều đó. –