Laden...

WPF - DataGridColumnHeader Template Button rechts docken und zweite Zeile volle Breite nutzen

Erstellt von Mandriva vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.207 Views
M
Mandriva Themenstarter:in
12 Beiträge seit 2012
vor 4 Jahren
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


<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 😃

5.657 Beiträge seit 2006
vor 4 Jahren

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.

Weeks of programming can save you hours of planning

M
Mandriva Themenstarter:in
12 Beiträge seit 2012
vor 4 Jahren

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.

W
955 Beiträge seit 2010
vor 4 Jahren

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.

M
Mandriva Themenstarter:in
12 Beiträge seit 2012
vor 4 Jahren

hallo witte 😃

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

danke dir 😃