WPF CellTemplate问题

大海啊全是水 2010-02-09 01:52:01
我现在想 在ListViewItem双击的时候 ,让ListViewItem中的一个单元改变(把PlayCell的Visibility从Hidden变成Visible)
不知道该在Triggers里面改怎么写,我觉得用EventTrigger,
在此之前也有个贴子是MouseOver的时候 让一个单元改变,那是可以用DataTrigger 可以做一个Binding
但是现在没办法这样做,没有什么属性表示双击了.


<DataTemplate x:Key="MusicPlayState">
<StackPanel x:Name="PlayCell" Orientation="Horizontal" Height="16" Width="16" Visibility="Hidden">
<Image Source="PlayState.bmp" Stretch="UniformToFill"/>
</StackPanel>
<DataTemplate.Triggers>
//...
</DataTemplate.Triggers>
</DataTemplate>


还有个问题是,我想通过代码 用ListViewItem得到他里面的一个单元,我想这样的话就可以直接去操作这个单元.
...全文
375 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
大海啊全是水 2010-02-14
  • 打赏
  • 举报
回复
感谢0009热诚的帮助,解答的很好很强大,佩服!祝你新年快乐哈 ^_^
结贴咯
RexZheng 2010-02-10
  • 打赏
  • 举报
回复
DataTemplate.FindName的第一个参数是指模板的某个控件的名称,如PlayCell,第二个参数是指它具体的载体,因为一个DataTemplate可能会应该到多个不同的对象(载体)上。


但是你这里我觉得有个简单一点的办法,就是你在MouseDoubleClick里面直接设置ListViewItem的Tag值,当然这个值是你自定义的,比如你起名叫“Editable”,那么在Cell的Template中你就可以用DataTrigger去获取这个值并做出响应了。
RexZheng 2010-02-10
  • 打赏
  • 举报
回复
引用 5 楼 tianhaoma8888 的回复:
是说我在处理MouseDoubleClick的时候设置ListViewItem的Tag为1,我在Cell的Template里面如何检测到Tag是1的话,然后就去做处理。是个办法,呵呵。
但是如果要用FindName 该怎么弄呢


如果使用Tag的话:
                <DataTrigger Binding="{Binding Tag, RelativeSource={RelativeSource AncestorType=ListViewItem}}"
Value="1">
<Setter TargetName="PlayCell"
Property="Visibility"
Value="Visible" />
</DataTrigger>


我不知道你这个DataTemplate是写在那里的,假设你写在window.resources里面,那么应该是这样做:


ListViewItem lvItem = sender as ListViewItem;
DataTemplate template = (DataTemplate)Resources["MusicPlayState"];
StackPanel panel = (StackPanel)template.FindName("PlayCell", lvItem );
// go on...
大海啊全是水 2010-02-10
  • 打赏
  • 举报
回复
引用 4 楼 0009 的回复:
DataTemplate.FindName的第一个参数是指模板的某个控件的名称,如PlayCell,第二个参数是指它具体的载体,因为一个DataTemplate可能会应该到多个不同的对象(载体)上。


但是你这里我觉得有个简单一点的办法,就是你在MouseDoubleClick里面直接设置ListViewItem的Tag值,当然这个值是你自定义的,比如你起名叫“Editable”,那么在Cell的Template中你就可以用DataTrigger去获取这个值并做出响应了。


0009大哥,是说我在处理MouseDoubleClick的时候设置ListViewItem的Tag为1,我在Cell的Template里面如何检测到Tag是1的话,然后就去做处理。是个办法,呵呵。
但是如果要用FindName 该怎么弄呢
大海啊全是水 2010-02-09
  • 打赏
  • 举报
回复
引用 2 楼 0009 的回复:
这个只能用事件来处理了,在XAML中解决不了


谢谢 0009了, 也就只有你经常帮我解决问题, 真感谢你拉..过年放假了,玩的好点哈
那用事件处理的话,在代码里面应该怎么写呢?

public void ListViewItem_MouseDoubleClick(object sender, EventArgs arg)
{
ListViewItem lvItem = sender as ListViewItem;
DataTemplate dataTemplate = (DataTemplate)lvItem.TryFindResource("MusicPlayState");
}

恩 找了ListViewItem的属性这些,没找到可以得到他的某个单元的方法.
我想得到这个ListViewItem对应到的PlayCell, 然后去更改他的Visibility属性Visible.
DataTemplate有个FindName但是不知道 有两个参数 不清楚后面那个参数. 也不知道该不该这么弄
RexZheng 2010-02-09
  • 打赏
  • 举报
回复
这个只能用事件来处理了,在XAML中解决不了
平生我自如 2010-02-09
  • 打赏
  • 举报
回复
帮顶一哈帮顶一哈帮顶一哈帮顶一哈

110,538

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

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