ich versuche das ich ein Border ziehen kann von einen Template ins andere. Wenn ich es ohne Template mache funktioniert es.
private void TextBox_MouseMove(object sender, MouseEventArgs e)
{
var canvas = sender as Border;
base.OnMouseMove(e);
if (e.LeftButton == MouseButtonState.Pressed)
{
DragDrop.DoDragDrop(this, canvas, DragDropEffects.Move);
}
}
private void Stackpanel_Drop(object sender, DragEventArgs e)
{
var obj = e.Data.GetData(typeof(Border)) as Border;
((StackPanel)(obj.Parent)).Children.Remove(obj);
((StackPanel)sender).Children.Add(obj);
((StackPanel)sender).UpdateLayout();
}
<StackPanel Grid.Column="2" Grid.Row="1" HorizontalAlignment="Center" Background="Transparent" AllowDrop="True" Drop="Stackpanel_Drop" >
<StackPanel.Resources>
<Style TargetType="{x:Type Border}">
<Setter Property="Margin" Value="0,10,0,0"/>
</Style>
</StackPanel.Resources>
<ItemsControl ItemsSource="{Binding FinishedTasksList}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<WrapPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Border Background="LightGray" Height="85" Width="250" MouseMove="TextBox_MouseMove">
<TextBlock Text="{Binding Details}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
Von diesem Xaml-Code gibt es 2 Weitere die Ähnlich sind
wenn ich es nur so z.b. 3 Borders anlege und sie verschiebe funktioniert es
denke bei StackPanel_Drop muss was angepasst werden. Einiges Probiert, aber keine Lösung gefunden
Hallo,
entweder obj
oder obj.Parent
ist null
. Überprüfe das mit dem [Artikel] Debugger: Wie verwende ich den von Visual Studio?
ja stimmt obj.parent ist null. Hättest du eventuell eine andre Idee wie ich den Border dann von jetzigen Template löschen kann und im anderen speichern kann?
Schau mal, ob TemplatedParent das richtige Objekt ist?
Wenn das klappt, dann kannst du ja nacheinander beide abfragen - und somit normale und Template
-Objekte behandeln.
liefert leider auch null oder ich hab einen Logikfehler
Dann überprüfe mal im Debugger, ob die Variable canvas
diese Eigenschaften gesetzt hat.
dort ist auch null bei Parent 😃
hab es jetzt mal so gemacht, bis ich dann zum gesuchten Parent komme.
var parent = VisualTreeHelper.GetParent(obj) as UIElement;
var parent2 = VisualTreeHelper.GetParent(parent) as UIElement;
var parent3 = VisualTreeHelper.GetParent(parent2) as UIElement;
var parent4 = VisualTreeHelper.GetParent(parent3) as UIElement;
var parent5 = VisualTreeHelper.GetParent(parent4) as UIElement;
var parent6 = VisualTreeHelper.GetParent(parent5) as UIElement;
((StackPanel)parent6).Children.Remove(obj);
aber das remove funktioniert nicht. Es kommt keine Fehlermeldung, aber es entfernt es nicht.
Du kannst ja auch nicht das obj
aus der Children
-Collection löschen, wenn es kein direktes Child
davon ist.
Du müßtest es also direkt aus parent
löschen oder aber den gesamten Tree, d.h. parent5
aus parent6
löschen.
ok denke jetzt sollte es gehen thx