ItemsControl 绑定后子控件Name的问题

anncesky 2010-12-09 10:45:07
silverlight 和 webform不太一样,在ItemsControl 绑定后,子控件的Name都是一样的
并没有继承像INamingContainer这样的接口

我想获取ItemsControl的子控件Image设置动画的话,
难道真要遍历一遍子控件,设置Name后,再设置动画?

最郁闷的是
silverlight的EventTrigger 只对 Loaded 有效

Iamge又没有Template

这怎么玩啊?
...全文
165 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
anncesky 2010-12-11
  • 打赏
  • 举报
回复
除了 Canvas 真的就没有其它的panel 可以设置 zindex了吗?
helloWorld1209 2010-12-10
  • 打赏
  • 举报
回复
[code=XML]

[/code <StackPanel x:Name="rootElement">
<StackPanel.Resources>
<Storyboard x:Name="myStoryboard">
<DoubleAnimation x:Name="da"
Storyboard.TargetName="MyAnimatedRectangle"
Storyboard.TargetProperty="Opacity"
From="1.0" To="0.0" Duration="0:0:1"
AutoReverse="True"
RepeatBehavior="Forever" />
</Storyboard>
</StackPanel.Resources>
<Rectangle MouseLeftButtonDown="MyAnimatedRectangle_MouseLeftButtonDown"
x:Name="MyAnimatedRectangle"
Width="100" Height="100" Fill="Blue" />
</StackPanel>]
helloWorld1209 2010-12-10
  • 打赏
  • 举报
回复
我想到一个方法,你看看行不行。

在你的mouseclicked里 你可以取到sender as Image,然后把这个Image的Name赋值,然后下面动态把Storyboard的TargetName重新设置一下,然后begind().

我试了一下,我这边没问题,代码:


private void MyAnimatedRectangle_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Rectangle rec = sender as Rectangle;
rec.SetValue(NameProperty, "NewName");

// DoubleAnimation x:Name="da"
da.SetValue(Storyboard.TargetNameProperty, "NewName");
myStoryboard.Begin();
}
anncesky 2010-12-10
  • 打赏
  • 举报
回复
我上面的做法其实就是让每个图片都有一个对应的动画

但是问题是,我这个动画是让图片在原有的位置放大

郁闷啊,不能设置放在最顶层,也就是说,放大后,会被其它图片覆盖

SL中好像唯一的办法就是用Canvas做容器,可以重叠并可以设置顶层

使用Itemscontrol这个办法是行不通了

我现在手工循环创建图片,并设置位置

这样他们就都在一个命名范围内了,也可以设置顶层,动画对象也只需要一个。

这么原始,哈哈!可能是我使用WEBForm用多了
anncesky 2010-12-10
  • 打赏
  • 举报
回复
回复楼上:
这个方法也是不行嘀
别说给动画设置的TargetName无效(因为命名范围不同)
就是可以,你点第二张图片的时候,设置的Name跟也第一张相同
动画的的目标是哪个?

我最后想到的办法是把动画和图片全封在一个UserControl里
这样他们的命名范围就相同了

DataTemplate 中就是这个封闭的UserControl
基本解决了
不过,现在出现问题了

唉,CSDN里的的SL高手真是少啊!
anncesky 2010-12-09
  • 打赏
  • 举报
回复
sl还不支持binding Name
anncesky 2010-12-09
  • 打赏
  • 举报
回复
..........................我都说了

就当是mouseclicked事件好 了

我要在mouseclicked事件里设置源对象的动画啊

那么我就要设置TargetName,也就是源对象的Name

现在怎么玩?
passself 2010-12-09
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jimmy_xiao0010 的回复:]

binding itemsource后 所以的子控件都是自动生成的,所以你无法通过子控件Name去找或者叫抓到每一个行的子控件。

如果你想控制子控件的话 我建议你把每个Image 实现下它的一些需要的事件,比如mouseclicked事件,
这样 一堆子控件相当于对于这一个事件函数,在事件函数里可以访问到它的object sender,这样可以去实现你需要的,但是这只是一个workaro……
[/Quote]
差不多这样
anncesky 2010-12-09
  • 打赏
  • 举报
回复
我想重新封装 Image : Control

这样我就可以设置Template了,不知道可不可行,郁闷啊
anncesky 2010-12-09
  • 打赏
  • 举报
回复
我知道你的意思,我也是这也干的

在Image的Mouse事件里,我得Begin Storyboard

这样一来,每个动画必须设置TargetName啊
helloWorld1209 2010-12-09
  • 打赏
  • 举报
回复
binding itemsource后 所以的子控件都是自动生成的,所以你无法通过子控件Name去找或者叫抓到每一个行的子控件。

如果你想控制子控件的话 我建议你把每个Image 实现下它的一些需要的事件,比如mouseclicked事件,
这样 一堆子控件相当于对于这一个事件函数,在事件函数里可以访问到它的object sender,这样可以去实现你需要的,但是这只是一个workaround,供参考

8,735

社区成员

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

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