Hallo, ich versuche das ein Canvas Control bei einer bestimmten Position in ein bestimmtes Stack Panel hinzugefügt wird. bekomme aber diese Fehlermeldung:
System.InvalidOperationException: "Bei dem angegebenen Element handelt es sich bereits um das logische untergeordnete Element eines anderen Elements. Führen Sie zuerst eine Trennung durch."
C# Code
private void TextBox_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
double postion = e.GetPosition(canvas).X - firstXPos - canvas.Margin.Left;
if (postion <= 0)
{
StackPanelCol0.Children.Add(MoveableBorder);
StackPanelCol1.Children.Remove(MoveableBorder);
StackPanelCol2.Children.Remove(MoveableBorder);
}
else if (postion > 0 && postion < 300)
{
StackPanelCol0.Children.Remove(MoveableBorder);
StackPanelCol1.Children.Add(MoveableBorder);
StackPanelCol2.Children.Remove(MoveableBorder);
}
else
{
StackPanelCol0.Children.Remove(MoveableBorder);
StackPanelCol1.Children.Remove(MoveableBorder);
StackPanelCol2.Children.Add(MoveableBorder);
}
movingObject = null;
}
XAML
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition />
</Grid.RowDefinitions>
<!--AddTasks-->
<!--Tasks-->
<Grid Grid.Row="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
<RowDefinition/>
</Grid.RowDefinitions>
<StackPanel Name="StackPanelCol0" Grid.Column="0" Grid.Row="1" AllowDrop="True"/>
<StackPanel Name="StackPanelCol1" Grid.Column="1" Grid.Row="1" AllowDrop="True"/>
<StackPanel Name="StackPanelCol2" Grid.Column="2" Grid.Row="1" AllowDrop="True"/>
<Canvas x:Name="canvas" Grid.Row="1" Background="Transparent" MouseLeftButtonDown="TextBox_MouseLeftButtonDown" HorizontalAlignment="Center" Margin="0,0,300,0"
MouseMove="TextBox_MouseMove" MouseLeftButtonUp="TextBox_MouseLeftButtonUp">
<Border x:Name="MoveableBorder" Background="Red" Height="85" Width="250" >
<TextBlock Text="2323" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</Canvas>
</Grid>
</Grid>
Steht ja in der Fehlermeldung: immer erst Remove, dann Add.
Führen Sie zuerst eine Trennung durch.
Du solltest aber MVVM korrekt anwenden.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Bin noch neu mit WPF. was vom Code würdest du in den ViewModel Packen?