Laden...

WPF kann dem Grid kein Element hinzufügen. Code Behind.

Letzter Beitrag vor einem Jahr 4 Posts 649 Views
WPF kann dem Grid kein Element hinzufügen. Code Behind.

Ich versuche momentan, das der Button "AddEmployeeButton" eine Reihe nach unter schoben wird. wenn er sich die labels nährt(Sind in einem WrapPanel).

Dabei bekomme ich diese Fehlermeldung

"Bei dem angegebenen Element handelt es sich bereits um das logische untergeordnete Element eines anderen Elements. Führen Sie zuerst eine Trennung durch."

Xaml-Snipet

<Grid x:Name="MainGrid">
     <Grid.ColumnDefinitions>
           <ColumnDefinition />
           <ColumnDefinition />
     </Grid.ColumnDefinitions>

     <Grid.RowDefinitions>
          <RowDefinition Height="auto"/>
          <RowDefinition Height="auto" />
          <RowDefinition Height="auto" />
          <RowDefinition Height="*" />
     </Grid.RowDefinitions>

     <Label Content="Mitarbeiter" FontSize="20" />

     <WrapPanel Name="FilterbuttonWrapPanel" Orientation="Horizontal" Margin="10,5,0,0"  Grid.Row="1" Grid.ColumnSpan="2" SizeChanged="FilterbuttonWrapPanel_SizeChanged">
              <Button Content="Alle" Name="AlleButton" Style="{StaticResource FilterButton}" Click="AlleButton_Click"/>
              <Button Content="Angestellte" Name="AngestellteButton" Style="{StaticResource FilterButton}"/>
              <Button Content="Auszubildende" Name="AuszubildendeButton" Style="{StaticResource FilterButton}"/>
              <Button Content="Abteilungsleiter" Name="AbteilungsleiterButton" Style="{StaticResource FilterButton}"/>
     </WrapPanel>

     <Border Grid.Row="1" Grid.Column="2" HorizontalAlignment="Right" BorderThickness="0.5" BorderBrush="Black" Background="Orange" CornerRadius="10" Width="170" Height="30"  >
              <Button Name="AddEmployeeButton" Content="Mitarbeiter Hinzufügen" Style="{StaticResource FilterButton}" Click="AddEmployeeButton_Click" Margin="0" FontSize="15"/>
     </Border>
</Grid> 

Code behind

if (FilterbuttonWrapPanel.ActualWidth < 450)
{
    Grid.SetRow(AddEmployeeButton, 2);
    //AddEmployeeButton.Margin = new Thickness(0, 20, 0, 0);
    MainGrid.Children.Add(AddEmployeeButton);
}
else
{
    Grid.SetRow(AddEmployeeButton, 1);
    //AddEmployeeButton.Margin = new Thickness(0);
    MainGrid.Children.Add(AddEmployeeButton);
}

Die Meldung sagt im Endeffekt, dass dein Control AddEmployeeButton bereits ein Unterelement eines anderen Controls ist.
Entsprechend musst du AddEmployeeButton erst entfernen und dann dem MainGrid wieder hinzufügen.
Ob das aber so sauber gelöst ist, würde ich erstmal bezweifeln.
Dann du musst dann auch wieder die Umkehrung des Ganzen umsetzen.
Ich habe da meine Zweifel, dass dies durch Code Behind sauber gelöst wird.
Ggf. müsste man dies über Styles umbrechen lassen können.

T-Virus

Developer, Developer, Developer, Developer....

99 little bugs in the code, 99 little bugs. Take one down, patch it around, 117 little bugs in the code.

Ok danke. Hättest du eventuel eine andere Vorgehensweise, sodass der Button automatisch eine Reihe nach unten geht, wenn er den Labels zu nah kommt?

Das, was Du womöglich suchst, nennt sich Responsive UI. Also Elemente, die sich anhand von Regeln automatisch anhand vom Inhalt anpassen.
Das wird in allen modernen UI-Technologien über die deklarative Schreibweise umgesetzt; in deinem Fall über XAML.

XAML bietet Dir verschiedene UI Container, die Du miteinander und ineinander kombinieren kannst.
Das führt dazu, dass Dein Button automatisch je nach Menge des Inhalts (in Deinem Fall das Grid) responsive angepasst wird - und eben nicht über eigenes Code Behind Zeugs.

Ja, das bedeutet, dass mal bisschen das UI Prinzip von XAML lernen und ausprobieren muss.

Responsive layouts with XAML