c# - 带按钮的 TreeView 多级自定义模板

标签 c# wpf templates treeview

我正在尝试在 WPF 和 C# 中为 treeView 构建模板。我的问题是我想为每个项目级别应用不同的模板。 我的意思是第一个项目级别看起来与第二个级别的项目不同。 我不知道如何使用模板和绑定(bind)来做到这一点,因为我是这项技术的新手。 我还试图将按钮添加到某个 treeviewItems 级别,以便我可以触发事件或命令...... 我知道这有很多问题,但我希望有人能给我一个关于这个的线索,或者至少如果可能的话。 谢谢。

最佳答案

假设所有对象都是同一类型,我可以看到实现此目的的两种方法,即使用 ItemTemplate 或 ItemTemplateSelector 属性。

我个人更喜欢使用 ItemTemplate 属性的 XAML 方法。

在模板中,您可以指定触发器以根据项目所在的层级改变外观。要获得此级别,您可以指定一个与此类似的转换器:

public class TreeViewItemToLevelConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (!(value is DependencyObject))
            return 0;

        return findLevel(value as DependencyObject, -1);
    }

    private int findLevel(DependencyObject tvi, int level)
    {
        DependencyObject tv = ItemsControl.ItemsControlFromItemContainer(tvi) as DependencyObject;

        if (tv != null)
            return findLevel(tv, level + 1);
        else
            return level;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new Exception("The method or operation is not implemented.");
    }
}

关于c# - 带按钮的 TreeView 多级自定义模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7006128/

相关文章:

c# - 切换 HDMI 显示器时启动应用程序

wpf - BitmapImage 解码速度表现 wpf

c++ - 这段 C++ 代码是什么意思?

c# - 连接已打开错误c#

c# - 如何保护 azure Blob

c# - 将带有 "&"的 XML 读入 C# XMLDocument 对象

c# - Entity Framework 和 WPF - 什么时候需要 dbContext.Load()?

c# - 使用ICommand和ServiceLocator传递父对象以MVVM方式加载子对象

c++ - 在模板类中使用 sqrt() 函数时消除歧义

c++ - 有没有办法将输入类型包装到 C++ 中的模板类?