Entwickler-Ecke

WPF / Silverlight - DragEnter/DragLeave ItemsControl.Items


Aggins - Fr 04.07.08 17:40
Titel: DragEnter/DragLeave ItemsControl.Items
Hallo,
für eine Anwendung habe ich Drag/Drop implementiert. Zuerst hatte ich dafür Panels benutzt. Unter anderem wies ich dort den gedraggten Elementen DragEnter- und DragLeave-EventHandler zu, um einen bestimmten Effekt hervorzurufen, falls die Elemente übereinanderliegen würden. Da mit Panels leider kein DataBinding möglich ist, nahm ich schließlich ItemsControls zur Hand. Den Items eines ItemsControls kann ich leider kein Event zuweisen, da es sich um objects handelt. Was kann ich jetzt tun, um den von mir gewünschten Effekt zu erzielen?

Ciao


Moderiert von user profile iconChristian S.: Topic aus C# - Die Sprache verschoben am Fr 04.07.2008 um 17:54


Kha - Sa 05.07.08 10:34

Jedes Item eines ItemControls wird zum Anzeigen in ein Container-Element gewrappt. Dieses kannst du per ItemContainerStyle stylen und ihm die Events anhängen.


Aggins - Mo 07.07.08 11:11

Cool danke! Im Microsoft-Forum konnte mir niemand diese Frage beantworten.


Aggins - Mo 07.07.08 12:30

Hallo,
gerade habe ich es mal ausprobiert. Kann man da wirklich DragEnterEvents einfügen. Ich habe es irgendwie nicht hinbekommen. Wie sähe denn der XAML-Code aus?


XML-Daten
1:
2:
3:
4:
5:
6:
7:
<ItemsControl
   <ItemsControl.ItemContainerStyle>
      <Style>
          ---- ? ----
      </Style>
   </ItemsControl.ItemContainerStyle>
</ItemsControl>


Dnake

Moderiert von user profile iconChristian S.: XML-Tags hinzugefügt


Kha - Mo 07.07.08 14:29

Style kennt zwei mögliche Child-Elemente: Setter für Properties und EventSetter für (Routed) Events.
Außerdem musst du afair noch TargetType="{x:Type FrameworkElement}" angeben.


Aggins - Mo 07.07.08 15:02

Den EventSetter hatte ich schon gesetzt, ich hatte nur TargetType="{x:Type FrameworkElement}" vergessen. Danke schön. Ich hatte das Gleiche schon mal über ein Template versucht. Das seltsame ist, dass beides Mal die DragEvents nicht angeschlagen sind. Im Gegensatz zu anderen wie zB MouseEnter. Woran könnte das denn liegen.


Aggins - Mi 09.07.08 16:16

Weiß keiner was dazu?


Kha - Mi 09.07.08 18:57

Hast du auch daran gedacht, AllowDrop zu setzen?

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
<ListBox>
    <ListBoxItem>Hello</ListBoxItem>
    <ListBoxItem>World</ListBoxItem>
    <ItemsControl.ItemContainerStyle>
        <Style TargetType="FrameworkElement">
            <EventSetter Event="DragEnter"
                         Handler="Meep" />
            <Setter Property="AllowDrop"
                    Value="True" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ListBox>