myCSharp.de - DIE C# und .NET Community (https://www.mycsharp.de/wbb2/index.php)
- Entwicklung (https://www.mycsharp.de/wbb2/board.php?boardid=3)
-- GUI: WPF und Silverlight (https://www.mycsharp.de/wbb2/board.php?boardid=85)
--- WPF - DataGridColumnHeader Template Button rechts docken und zweite Zeile volle Breite nutzen (https://www.mycsharp.de/wbb2/thread.php?threadid=121803)


Geschrieben von Mandriva am 22.04.2019 um 09:30:
  WPF - DataGridColumnHeader Template Button rechts docken und zweite Zeile volle Breite nutzen
Hallo zusammen..

brauche mal etwas schützenhilfe eurerseits, ich weis nicht genau ob ich mit beiden beinen auf dem schlauch stehe oder einfach einen falschen denkansatz habe..

ich benötige ein DataGridClomunHeader, welcher zwei zeilen und zwei spalten hat, soweit kein problem..
nun möchte ich das in der ersten zeile, die zweite spalte bzw das control(hier der Button) immer rechts angedockt wird und in der zweiten zeile, die zweite spalte den restlichen platz vollständig ausfüllt.(auch nach dem resize der spalte)

habe diverse variationen von controls und/oder ausrichtungen probiert die mir eingefallen sind, auch die foren- oder googlesuche half mir nicht wirklich weiter.

hier mal mein aktueller stand, das ganze befindet sich in einem UserControl

XML-Code:
<Grid x:Name="MainContent" Background="LightGray">
      <DataGrid x:Name="_DataGrid" VerticalScrollBarVisibility="Auto" IsReadOnly="True" HorizontalScrollBarVisibility="Auto" CanUserSortColumns="True" CanUserReorderColumns="True" CanUserAddRows="False" CanUserResizeRows="False" ItemsSource="{Binding CurrentDataTable}">

         <DataGrid.Resources>
            <Style TargetType="{x:Type DataGridColumnHeader}">
               <Setter Property="ContentTemplate">
                  <Setter.Value>
                     <DataTemplate>

                        <Grid>
                           <Grid.ColumnDefinitions>
                              <ColumnDefinition />
                           </Grid.ColumnDefinitions>
                           <Grid.RowDefinitions>
                              <RowDefinition />
                              <RowDefinition />
                           </Grid.RowDefinitions>

                           <Grid Grid.Row="0" Grid.Column="0">
                              <Grid.ColumnDefinitions>
                                 <ColumnDefinition />
                                 <ColumnDefinition />
                              </Grid.ColumnDefinitions>
                              <Grid.RowDefinitions>
                                 <RowDefinition />
                              </Grid.RowDefinitions>
                              <Label Grid.Row="0" Grid.Column="0" Content="{Binding}" />
                              <Button Grid.Row="0" Grid.Column="1" MinWidth="30" MaxWidth="30"/>
                           </Grid>

                           <Grid Grid.Row="1" Grid.Column="0" >
                              <Grid.ColumnDefinitions>
                                 <ColumnDefinition />
                                 <ColumnDefinition />
                              </Grid.ColumnDefinitions>
                              <Grid.RowDefinitions>
                                 <RowDefinition />
                              </Grid.RowDefinitions>
                              <ComboBox Grid.Row="0" Grid.Column="0" MinWidth="30"/>
                              <TextBox Grid.Row="0" Grid.Column="1" />
                           </Grid>

                        </Grid>
                     </DataTemplate>
                  </Setter.Value>
               </Setter>
            </Style>
         </DataGrid.Resources>
      </DataGrid>
   </Grid>

vlt hat jemand von euch ja einen anderen ansatz bzw ein anderes bsp für mich.

vielen dank im vorraus :)


Geschrieben von MrSparkle am 22.04.2019 um 19:06:
 
ColumnDefinition hat eine  Width-Eigenschaft. Wenn du den Wert auf "*" setzt, dann wird die restliche Breite ausgefüllt.

Um ein Element rechts auszurichten, kannst du die  HorizontalAlignment-Eigenschaft verwenden.


Geschrieben von Mandriva am 23.04.2019 um 08:49:
 
vielen dank fuer deine antwort :)

habe es natuerlich mit angabe der groesse und positionierung/ausrichtung schon versucht..
da klappt das mit dem ausrichten auch, nur passt sich da der bereich(hier Rot) nicht der eigentlichen breite der spalte an.
mit dem StackPanel und dem DockPanel habe ich gleichen effekt..
die breite, welche ich an die spaltenbreite angepasst haben moechte wird lediglich durch eingabe (bzw anpassung) in die textbox vergroessert..



wie gesagt vlt habe ich da einen falschen denkansatz oder sehe grade den wald vor lauter baeumen einfach nur nicht.


Geschrieben von witte am 23.04.2019 um 11:05:
 
Wahrscheinlich ist das Grid direkt hinter dem roten BEreich zuende. Versuche mal das Grid auf HorizontalAlignment.Stretch zu setzen, nicht den Button. Außerdem sollte es einfacher sein wenn beide Zeilen in einem Control wären.


Geschrieben von Mandriva am 23.04.2019 um 14:56:
 
hallo witte :)

HorizontalAlignment zeigt keine auswirkungen in dem fall.. das auslagern in ein eigenes control werd ich nachhergleich mal testen

danke dir :)


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 21.08.2019 19:50