MVVMを使用してWPFでドラッグアンドドロップを作成しようとしています
ここで DragDropHelper を使用したソリューションを提案するBea Stollnitz http://bea.stollnitzからこのリンクを見つけました: https://github.com/bstollnitz/old-wpf-blog/tree/master/46-DragDropListBox
しかし、データテンプレートのボタンやラジオボタンなどのコンポーネントを生成するいくつかのイベントでカスタマイズしようとすると、ドラッグアンドドロップでこのエラーが発生します
「装飾を持たない要素の装飾にアクセスできません。」
この行で
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>
つまり、テンプレートにラジオボタンを追加します
私はすでにいくつかのリンクを見つけましたが、問題を解決する明確な方法を説明しているものはありません。
このコードを追加することを提案する
VisualCollectionのvisualChildren; FrameworkElement @オブジェクト;
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=必須
提案する
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にもバグがあります