我尝试使用MVVM对WPF进行拖放操作
我从Bea Stollnitz http://bea.stollnitz找到了这个链接,提出了一个解决方案 使用DragDropHelper:bea.stollnitz.com/files/46/DragDropListBox.zip
但是当我尝试使用某些事件来自定义它时,会在datatemplate中生成按钮或radioButton等组件,我在拖放时会出现此错误。降
“无法访问没有装饰者的元素上的装饰器。”
在这一行
this.adornerLayer.Update(this.AdornedElement);
您可以通过下载bea.stollnitz.com/files/46/DragDropListBox.zip轻松复制
并替换
<DataTemplate x:Key="pictureTemplate">
<DataTemplate.Resources>
<Style TargetType="Image">
<Setter Property="Width" Value="50" />
<Setter Property="Height" Value="50" />
<Setter Property="Margin" Value="10" />
</Style>
</DataTemplate.Resources>
<Image Source="{Binding Path=Location}" />
</DataTemplate>
通过
<DataTemplate x:Key="pictureTemplate">
<DataTemplate.Resources>
<Style TargetType="Image">
<Setter Property="Width" Value="50" />
<Setter Property="Height" Value="50" />
<Setter Property="Margin" Value="10" />
</Style>
</DataTemplate.Resources>
<Grid>
<Image Source="{Binding Path=Location}" />
<RadioButton />
</Grid>
</DataTemplate>
即。在模板中添加radiobutton
我已经找到了一些链接,但没有一个解释明确解决问题的方法。
No events passed to WPF adorner layer
建议添加此代码
VisualCollection visualChildren; FrameworkElement @object;
public CustomAdorner(UIElement adornedElement) :
base(adornedElement)
{
visualChildren = new VisualCollection(this);
@object = new Button {Content = "prova"};
visualChildren.Add(@object);
}
protected override Visual GetVisualChild(int index)
{
return visualChildren[index];
}
但我确定在哪里添加它以及此链接的相同内容
建议
private bool IsItemDisconnected(object item)
{
bool isDisconnected = false;
var itemType = item.GetType();
if (itemType.FullName.Equals("MS.Internal.NamedObject"))
{
isDisconnected = true;
}
return isDisconnected;
}
这最后一个链接谈论.NET 4问题,但我也有3.5的错误
答案 0 :(得分:1)
我想在这里发帖说我找到了解决方法。阅读Drag drop error : Cannot access adorners on element that has no adorners
后if (this.adornerLayer != null && this.contentPresenter.Content != null)
{
this.adornerLayer.Update(this.AdornedElement);
}