【问题标题】:TreeView multilevel custom template with buttons带有按钮的 TreeView 多级自定义模板
【发布时间】:2011-10-23 18:47:41
【问题描述】:

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

【问题讨论】:

  • @Ziad:这是可能的。每个 TreeNode 都是一个容器,您可以在其中添加自定义控件。
  • 有可能! Click here!
  • 谢谢大家。你真的帮了我。我现在有更好的理解了!!!

标签: c# wpf templates treeview


【解决方案1】:

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

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

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

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.");
    }
}

【讨论】:

  • 我在这里投票。我要补充一点,您应该确定“级别”是什么意思。是视觉层面,还是逻辑层面?作为“逻辑级别”,我指的是所显示项目的逻辑重要性,不一定与视觉层次结构相匹配。如果是这样,我建议在您的模型中提供一个专用属性“Level”,而不是计算显示的“fatty”。但是,从视觉上来说,“胖”的 sn-p 是可以的。
【解决方案2】:

HierarchicalDataTemplate 也有 ItemTemplate 属性...你可以使用它。

看到这个...

http://blogs.msdn.com/b/chkoenig/archive/2008/05/24/hierarchical-databinding-in-wpf.aspx

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-09
    • 2020-09-26
    相关资源
    最近更新 更多