怎样使TreeView节点展开和折叠显示不同的节点图片

lengq 2010-09-06 07:19:28
我是用HierarchicalDataTemplate模板来生成的TreeView
<HierarchicalDataTemplate x:key="TreeTemplate">
ItemsSource="{binding SubUnitList}">
<StackPanel Orientation="Horizonal">
<Image Name="NodeImage" Width="16" Height="16" Margin="3,0" Source="C:/aaaa.jpg"/>
<TextBlock Text="{Binding UnitName}"/>
</StackPanel>
</HierarchicalDataTemplate>


另外如何实现第一层节点初始时就是展开状态。

急求解决方法,
在线等,谢谢各位啦。
...全文
757 23 打赏 收藏 转发到动态 举报
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
Rui_Treasure 2011-04-23
  • 打赏
  • 举报
回复
怎么可以切换啊。。
DAVID_DEEYE 2010-09-09
  • 打赏
  • 举报
回复
我给你一小段代码,这是我在以前的程序中使用的,打开时为向下箭头,关闭时向左:
private function setSize():void
{
if(flag==true){
flag=false;
iconExpand.source = Icons.iconLinkCollapse;
}
else{
flag=true;
iconExpand.source = Icons.iconLinkExpand;
}
}
<mx:Image id="iconExpand" source="{Icons.iconLinkExpand}" click="setSize()"/>
lengq 2010-09-09
  • 打赏
  • 举报
回复
问题解决了,在绑定的时候加上 Mode=TwoWay 就可以了。

首先感谢楼上的帮助,因为问题已经解决,所以没有试你给的程序,但还是谢谢你。

另外特别感谢Sunpire耐心的帮助。
lengq 2010-09-08
  • 打赏
  • 举报
回复
我用的是VS2008开发的,应该可以吧。
我突然想起来,是不是因为没有设Mode=TwoWay的原因啊,默认是Mode=OneWay,
不知道了,明天再试试吧。
很感谢Sunpire耐心的解答。
Sunpire 2010-09-08
  • 打赏
  • 举报
回复
不错,楼主有进步了。

楼主,Sorry,我误导了楼主也误导了自己。

2楼的第二个链接的4楼中的方法,我刚试了一下,像

<Style x:Key="treeViewStyle" TargetType="sdk:TreeViewItem">
<Setter Property="IsExpanded" Value="{Binding Path=IsExpanded,Mode=TwoWay}" />
</Style>

用于 TreeView.ItemContainerStyle 时,在 Silverlight 中是行不通的,在WPF中不知道,
因为 Style 中用不了 Binding 。

莫非使用分层模板就不能方便的响应 TreeViewItem 的 Collapsed 、Expanded 事件了?
最好是使用绑定的方式。

有时间再尝试尝试,最近较忙~
Joetao 2010-09-08
  • 打赏
  • 举报
回复
不错!标记学习!
lengq 2010-09-08
  • 打赏
  • 举报
回复
<HierarchicalDataTemplate x:key="TreeTemplate">
ItemsSource="{binding SubUnitList}">
<StackPanel Orientation="Horizonal">
<Image Name="NodeImage" Width="16" Height="16" Margin="3,0" Source="{binding IsExpanded, Converter={StaticResource imageConverter} }"/>
<TextBlock Text="{Binding UnitName}"/>
</StackPanel>
</HierarchicalDataTemplate>
因为是用以上模板画的TreeView,所以只有在初期表示时才会根据IsExpanded来设定图片,折叠或展开时,不会调用Convert方法。

IValueConverters实现

class ImageConverter : IValueConverter
{
public object Convert(Object value, Type targetType, object parameter, CultureInfo culture)
{
string strImageUri = string.Empty;
if ((bool)value)
{
strImageUri = "C:/open.jpg"
}
else
{
strImageUri = "C:/close.jpg"
}
return strImageUri;
}

public object ConvertBack(Object value, Type targetType, object parameter, CultureInfo culture)
{
throw new System.NotImplementedException;

}
}
cww2010 2010-09-07
  • 打赏
  • 举报
回复
http://silverlightchina.net/html/developer/2009/1212/393_4.html
Sunpire 2010-09-07
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20100722/15/263F94EA-F8CE-4071-87DF-75EEC6836522.html
2楼

关于 IValueConverter ,其实微软的例子已经足够了(Silverlight和WPF相同):
数据转换
http://msdn.microsoft.com/zh-cn/library/cc278072(VS.95).aspx#data_conversions
lengq 2010-09-07
  • 打赏
  • 举报
回复
回老冷,
你给我的例子我也看了,
例子里的节点图片虽然不同,但是死的,不能随着节点的展开和折叠变化。

还有别的办法么?

谢谢你。
lengq 2010-09-07
  • 打赏
  • 举报
回复
回Sunpire

你给我的例子我看了,
但是我觉得和我说的情况还是不样。

首先我的图片不是伴随后台某个属性的值变更的,而是换面展开折叠节点的动作,
所以我感觉必须在展开和折叠节点时更改图片的PATH。

呵呵,不知道我说清楚没。

非常感谢你
jv9 2010-09-07
  • 打赏
  • 举报
回复


楼主参考这篇教程:http://www.silverlightchina.net/html/tips/2010/0101/515.html

http://www.silverlightchina.net/html/developer/2009/1212/393.html
Sunpire 2010-09-07
  • 打赏
  • 举报
回复
楼主还是没有入门啊。
“一切的前台UI都绑定至后台Model的一个属性,如 IsExpanded 属性就可以了,
当然,很可能要使用到 IValuedConverter。”

Model的IsExpanded 本身就是绑定到 TreeViewItem 的 IsExpanded 属性的,且Mode=TwoWay,这样能理解么?
这样当 TreeViewItem 展开/收缩 时,Model的IsExpanded也发生变化,再由 IValuedConverter 就能得到不同的 ImageSource 了。
wzlsquall 2010-09-07
  • 打赏
  • 举报
回复
我也想知道啊
lengq 2010-09-07
  • 打赏
  • 举报
回复
<HierarchicalDataTemplate x:key="TreeTemplate">
ItemsSource="{binding SubUnitList}">
<StackPanel Orientation="Horizonal">
<Image Name="NodeImage" Width="16" Height="16" Margin="3,0" Source="C:/aaaa.jpg"/>
<TextBlock Text="{Binding UnitName}"/>
</StackPanel>
</HierarchicalDataTemplate>

我的问题就是在节点展开和折叠时,将上面Image的Source变更为"C:/bbbb.jpg"/怎么实现。
lengq 2010-09-07
  • 打赏
  • 举报
回复
楼上的,先谢谢你
但是我要TreeView本身的“+”,“-”不变,在TreeViewItem里的图片随着节点的展开和折叠变化。
lengq 2010-09-06
  • 打赏
  • 举报
回复
恩,才学WPF不久,
IValueConverter是个转换器的接口吧,我自己再研究一下。
如果楼上有时间,可以帮我具体实现一下么?

谢谢
Sunpire 2010-09-06
  • 打赏
  • 举报
回复
楼主是新手?
IValueConverter 这个明白么?
lengq 2010-09-06
  • 打赏
  • 举报
回复
你说的我看了, 但还是没头绪,
能具体的说说么?

谢谢
Sunpire 2010-09-06
  • 打赏
  • 举报
回复
哦,不是要更改那个小三角形为两个图片?

那就更简单了, 按照第二个链接4楼的思路就可以了,
一切的前台UI都绑定至后台Model的一个属性,如 IsExpanded 属性就可以了,
当然,很可能要使用到 IValuedConverter。
加载更多回复(3)

8,735

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧