wpf - 如何在 WPF 中创建不可选择的 TreeViewItem

标签 wpf triggers styles

我正在绑定(bind) TreeView。我的原因是 TreeView 级别 0 是不可选择的。当我单击 0 级 TreeView 项时,必须折叠当前项并且必须选择第一个子项。

├ Item 1   //<- level 0. this item must be unselectable
├─ Child Item 11 //<- level 1
├─ Child Item 12
├ Item 2   //<- level 0. When i click this item, that is automatically collapse
├─ Child Item 21
├─ Child Item 22

如何使用样式做到这一点?

最佳答案

我会在我的 View 模型中这样做。 0 级项目的 View 模型将具有:

public bool IsSelected
{
    get { return false; }
    set
    {
        // error checking is omitted
        Children[0].IsSelected = value;

        // let WPF know that IsSelected may have changed from what it's expecting
        this.Dispatcher.BeginInvoke((ThreadStart)delegate
        {
            this.OnPropertyChanged(() => this.IsSelected);
        });
    }
}

您的 XAML 看起来像:
<TreeView>
    <TreeView.ItemContainerStyle>
        <Style TargetType="TreeViewItem">
            <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
        </Style>
    </TreeView.ItemContainerStyle>
</TreeView>

现在,每当用户单击一级项目时,VM 将拒绝被选中,而是选择其第一个子项目。

您可以使用完全相同的技术来处理您对折叠关卡的要求。

关于wpf - 如何在 WPF 中创建不可选择的 TreeViewItem,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2750394/

相关文章:

c# - 在 WPF MVVM 中绑定(bind)图像

c# - 使 WPF 窗口免疫显示桌面(防止隐藏)

triggers - Salesforce Apex 触发器 - 如何检查字段是否包含在更新触发器中?

function - 在 CartoDB 中创建触发器和函数

c# - ComboBox 项目的布局

c# - 我们可以在 WPF 中的 DataGrid 单元格内有一个网格吗?

javascript - Google Sheets,以所有者身份运行函数

python - 如何通过标签更改Treeview中项目的背景/前景?

wpf - 绑定(bind)转换器参数

c# - Wpf:在多个控件上应用自定义样式的工具提示