请问WPF Xaml 用ItemTemplate和用ItemContainerStyle的区别,谁能解释一下以下现象:

后台代码for(inti=0;i<10;i++){for(intj=0;j<20;j++){doubleleft=20+j*80;doubletop=20+i*90;Th... 后台代码
for (int i = 0; i < 10; i++)
{
for (int j=0; j<20;j++)
{

double left = 20 + j * 80;
double top =20 + i * 90;
Thickness oo =new Thickness(left,top,0,0);
double width = 60;
double height = 80;
SolidColorBrush bb = Brushes.Blue;
Rectangle uu = new Rectangle();
uu.Fill = Brushes.Blue;
double theigth = 60;
BitmapImage aa = new BitmapImage();
aa.BeginInit();
aa.UriSource = new Uri(@"e:\dm2\work\0206_IMG_OUT_x.jpg");
aa.EndInit();
Image yy = new Image();
yy.Source = aa;
string s = i.ToString() + j.ToString();
HH.Add(new { oo, width, height, bb, left, top, theigth,aa,s });/*有些东西是用不到的,可以不理它*/

}
}

xaml中部分代码,方法1:
<Window.Resources >
<DataTemplate x:Key="qq">
<Image Margin="{Binding oo}" Source="{Binding aa}" Height="{Binding heigth}"
Width="{Binding width}" Stretch="Fill"></Image>
</DataTemplate>
</Window.Resources>
<Grid>
<ListBox Name="ML" Margin="20,30,10,10" ItemTemplate="{StaticResource qq}" >
<ListBox.ItemsPanel>
<ItemsPanelTemplate>
<Canvas Name="ca" Loaded="ZoomableCanvas_Loaded" >
</Canvas>
</ItemsPanelTemplate>
</ListBox.ItemsPanel>
</ListBox>

方法2:
<ListBox Name="ML" Margin="20,30,10,10" >
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Height" Value="{Binding height}"></Setter>
<Setter Property="Canvas.Left" Value="{Binding left}"></Setter>
<Setter Property="Canvas.Top" Value="{Binding top}"></Setter>
<Setter Property="Width" Value="{Binding width}"></Setter>
<Setter Property="Background" Value="{Binding bb}"></Setter>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate >
<Image Source="{Binding aa}" Height="{Binding heigth}"
Width="{Binding width}" Stretch="Fill"></Image>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
两种出来的效果完全不一样:
方法1出来的不能单独选中每个image,方法2可以,why?
上图是第二种方法的,第三张图片可以被单独选中,但第一种方法,如果选则的话,则所有的图片都被选中了,还不止于此,应该是选中的整个canvas,求解释
展开
 我来答
Mickal小米
2013-02-25 · TA获得超过3666个赞
知道大有可为答主
回答量:1542
采纳率:100%
帮助的人:1775万
展开全部
方法2中楼主也设置了同方法1中相同的ListBox.ItemsPanel吗?
更多追问追答
追问

是的,方法2

 



             

追答
那你方法1中有对listboxitem设置canvas.left和top吗?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
草薙在
2013-02-22 · TA获得超过4795个赞
知道大有可为答主
回答量:6187
采纳率:50%
帮助的人:6305万
展开全部
估计你的模板绑定到同一个属性上了
追问
代码都在,能对照代码说具体一点吗?
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 2条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式