gpt4 book ai didi

wpf - 无法在没有装饰者的元素上访问装饰者

转载 作者:行者123 更新时间:2023-12-03 10:18:16 24 4
gpt4 key购买 nike

我尝试使用MVVM在WPF上进行一些拖放

我从Bea Stollnitz http://bea.stollnitz找到了此链接,提出了解决方案
在这里使用DragDropHelper:https://github.com/bstollnitz/old-wpf-blog/tree/master/46-DragDropListBox

但是当我尝试使用一些事件生成组件来自定义它时,例如datatemplate中的button或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>

即在模板中添加单选按钮

我已经找到了一些链接,但是都没有一个明确的方法可以解决该问题。

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];
}

但我敢肯定,在哪里添加它,与此链接相同

http://social.msdn.microsoft.com/Forums/en/wpf/thread/e6643abc-4457-44aa-a3ee-dd389c88bd86?prof=required

那提议
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上也有此错误

最佳答案

我想在这里发布我已经找到解决方案的信息。阅读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);
}

关于wpf - 无法在没有装饰者的元素上访问装饰者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8655814/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com