我使用了由BEA Stollnitz(http://bea.stollnitz.com/blog/?p=53)提供的示例代码,以使拖放在我的申请下降,拖累装饰器等无法访问拖累装饰器模板
一切正常,我拖装饰者很好地展示,我有我想要的所有行为。
但是(是的,总是有一个但是),我不能访问Drag Adorner的DataTemplate,以便根据拖动的数据显示不同的数据。
我简化了代码,但基本知识仍然存在。
这是我DragAdorner的DataTemplate中
<DataTemplate x:Key="DragAndDropTemplate" DataType="{x:Type MyType}">
<Grid>
<Grid Opacity="0.5">
<Border x:Name="HeaderBorder" CornerRadius="2" BorderThickness="1" Margin="5,2,5,2">
<Border x:Name="InsideBorder" CornerRadius="2" BorderThickness="1">
<TextBlock x:Name="number" Text="{Binding Name}" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/>
</Border>
</Border>
</Grid>
<Border Width="17" Height="17" BorderBrush="White" HorizontalAlignment="Center" VerticalAlignment="Center" CornerRadius="1" x:Name="numberContainer" Visibility="Collapsed">
<TextBlock x:Name="number" Text="80" HorizontalAlignment="Center" VerticalAlignment="Center" Foreground="White"/>
</Border>
</Grid>
</DataTemplate>
这是创建装饰器的代码:
if (this.draggedAdorner == null)
{
var adornerLayer = AdornerLayer.GetAdornerLayer(source);
this.draggedAdorner = new DraggedAdorner(draggedData, dataTemplate, source, adornerLayer);
}
这是由init装饰器的代码
public DraggedAdorner(List dragDropData, DataTemplate dragDropTemplate, FrameworkElement adornedElement, AdornerLayer adornerLayer)
: base(adornedElement)
{
this.adornerLayer = adornerLayer;
this.contentPresenter = new ContentPresenter();
this.contentPresenter.Content = dragDropData[0];
this.contentPresenter.ContentTemplate = dragDropTemplate;
this.adornerLayer.Add(this);
}
draggedData将是MyType的列表,我将第一个项目作为ContentPresenter o的内容f我的DraggedAdorner,所以DataTemplate可以应用。
问题是,我想访问DataTemplate的numberContainer和数字控件,以便在装饰器中显示拖动对象的数量。但无论我尝试什么,我都无法设法访问它,它以“此操作仅对应用此模板的元素有效”结束。信息。
我已经因子评分我可以做这样的事情:
this.contentPresenter.ContentTemplate.FindName("number", this.contentPresenter);
由于DataTemplate中应适用于ContentPresenter,但没了...... 的信息,adornedElement是从中拖动出现的ListViewItem。
如果你有什么想法?