这里有用wpf的么?有关于listview的DataTemplate的问题想请教

spspli 2011-03-20 11:29:27
我有这么个数据模板:

<DataTemplate x:Key="listViewSourceItemTemplate" DataType="{x:Type this:SourceItemField}">
<this:SourceItemField Background="LightPink">
<i:Interaction.Behaviors>
<ei:MouseDragElementBehavior/>
</i:Interaction.Behaviors>
<StackPanel Orientation="Horizontal" Margin="5,10,5,10" Background="LightGray">
<TextBlock Text="{Binding Path=FieldType,StringFormat=\{0\}}" Margin="0,0,5,0" />
<TextBlock Text="{Binding Path=ContextName,StringFormat=\{0\}}" Margin="0,0,5,0" />
<TextBlock Text="{Binding Path=FieldName,StringFormat=\{0\}}" Margin="0,0,5,0" />
<TextBlock Text="{Binding Path=ConnectionNumber,StringFormat=\{0\}}" Margin="0,0,5,0" />
</StackPanel>
</this:SourceItemField>
</DataTemplate>

SourceItemField是我自己写的继承了Border的一个control class,成员包括FieldType etc.

然后我的windows上有个canvas, 这个canvas上放了2个listview,一个叫SourceListView 一个叫TargetListView。
这个SourceListView呢就用了上面这个listViewSourceItemTamplate,比如我绑定的数据源是一个SourceItemField的list

现在我有这样的C# code:
public void SetPosition()
{
Center = this.TransformToAncestor(FindAncestor<Canvas>(this)).Transform(new Point(this.ActualWidth / 2, this.ActualHeight / 2));
}
// "this" above is a sourceItemField object

// walk up the visual tree for parent of type T
private static T FindAncestor<T>(DependencyObject current)
where T : DependencyObject
{
do
{
if (current is T)
{
return (T)current;
}
current = VisualTreeHelper.GetParent(current);
}
while (current != null);
return null;
}
但是我发现这个VisualTreeHelper.GetParent似乎不认为我的SourceListView是这个sourceFieldItem的parent,调用FindAncestor的结果是返回null,我跟进去看了,VisualTreeHelper.GetParent(sourceFieldItem)就返回null了

我在没用listview之前 做了很简单的 - 就是canvas上直接放一个sourceFieldItem,去GetParent就能找到canvas
这是怎么回事呢?
如果用了DataTemplate就是不能GetParent的话,我有什么办法能避免使用这个DataTemplate么?其实我想做的就是找到我这个sourceFieldItem在canvas上的绝对位置,如果能实现的话,也不一定要找这个canvas
求帮助!多谢!!!
...全文
124 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

8,834

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 组件/控件开发
社区管理员
  • 组件/控件开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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