WPF TreeView 想要在选择父级时选择第一个子级

标签 wpf treeview treeviewitem

我正在使用演示模型通过 TreeView 控件在我的应用程序中实现导航。我通过双向绑定(bind)将 TreeViewItem 的 IsSelected 属性绑定(bind)到我的 View 模型。当选择具有子节点的节点时,我希望选择该节点的第一个子节点而不是单击的节点。在我的演示模型上设置 IsSelected 属性时,TreeViewItem 似乎没有监听属性更改事件。第一个子节点已被选中,但父节点并未取消选择。这是我的演示模型中的代码。

public bool IsSelected {
    get {
        return this._isSelected;
    }
    set {
        if(this._isSelected != value) {
            this._isSelected = value;
            if(this.Nodes.Count > 0) {
                this._isSelected = false;
                this.Nodes[0].IsSelected = true;
            }
            this.NotifyPropertyChanged("IsSelected");
        }
    }
}

这是我的 TreeViewItem 的样式:

<Style TargetType="{x:Type TreeViewItem}">
    <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
</Style>

最佳答案

我遇到了一个非常类似的问题,我发现当我通过代码选择一个子节点时,我还需要将焦点放在 TreeViewItem 包装器上,以便父节点将成为您所谓的“UnSelect”。所以在 xaml 中我添加了一个事件处理程序:

<EventSetter Event="TreeViewItem.Selected" 
                    Handler="TreeViewItem_Selected" 
                        />

在分部类中:

Private Sub TreeViewItem_Selected(ByVal sender As System.Object, ByVal e As RoutedEventArgs)
            If CType(sender, TreeViewItem) IsNot Nothing Then
                CType(sender, TreeViewItem).Focus()
                e.Handled = True
            End If
End Sub

关于WPF TreeView 想要在选择父级时选择第一个子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/834267/

相关文章:

wpf - 有什么方法可以使 WPF 菜单中的分隔符更窄?

.net - 实现 WPF MVVM 模式以关闭表单时获取 "DialogResult can be set only after Window is created and shown as dialog"

wpf - TabControl中的ListBox滚动问题

wpf - 当 EnterActions 似乎起作用时,为什么样式触发器的 Setter 不起作用

c# - 获取 TreeView 控件中所有树节点(所有级别)的列表

wpf - 在应用了 HierarchicalDataTemplate 的 WPF TreeView 中绑定(bind) SelectedItem

html - 使用动态绑定(bind)的 polymer 绘制树结构

c# - 如何为 TreeView 创建节点模板?

c# - 为什么我的 TreeView 仅显示一层深度?

wpf - TreeViewItem 上的键绑定(bind)