2011-12-28 3 views
2

Я пытаюсь сделать некоторые перетаскивании & падения на WPF с помощью MVVMне удается получить доступ к графическим элементам на элементе, который не имеет графические элементы

Я нашел эту ссылку от Bea Stollnitz http://bea.stollnitz, предполагающего решения с DragDropHelper здесь: bea.stollnitz. ком/файлы/46/DragDropListBox.zip

, но когда я пытаюсь настроить его с некоторыми событиями создания компонентов, таких как кнопки или RadioButton в DataTemplate, я эта ошибка на дрэг & капли

«не удается получить доступ на графических элементов элемент, который не имеет украшений ».

на этой линии

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

+0

Так что никто не кажется вдохновленным моим вопросом. Я нахожу еще одну реализацию решения bea stollnitz. Используя http://www.codeproject.com/KB/WPF/gong-wpf-dragdrop.aspx, я наконец-то перетащил drag & drop с шаблоном генерации событий. это решение больше похоже на решение, основанное на коде, а не на реальный mvvm (потому что мы напрямую управляем с перетаскиванием и удалением событий в модели представления), но он работает без ошибок и имеет другое преимущество, можно заказать отброшенные элементы. – Pansoul

+0

Вы когда-нибудь находили решение? У меня такая же проблема, я думаю, тот же код. –

ответ