Announcement

Collapse
No announcement yet.

[WPF] Maximale Breite TextBox in DataGridTemplateColumn.Header

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • [WPF] Maximale Breite TextBox in DataGridTemplateColumn.Header

    Moin,

    Ich habe eine DataGrid Komponente in meiner Anwendung, bei der ich die Spalten-Header selbst gestalte.
    Der Spaltenkopf besteht aus einem Label und einer TextBox untereinander angeordnet. Das ganze habe ich über ein Grid gelöst, weil ich gehofft hatte, dass eine TextBox in einem Grid die volle Breite füllt.

    Dem ist leider nicht so ( zumindest an dieser Stelle nicht! ). Wie kann ich es relativ simpel anstellen, dass die TextBox die gesamte Breite der DataGrid-Spalte einnimmt, ohne absolute Werte für die Breite angeben zu müssen?

    Der Aufbau aktuell:
    Code:
    <DataGrid Grid.Row="0">
        <DataGrid.Columns>
            <DataGridTemplateColumn Width="*">
                <DataGridTemplateColumn.Header>
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <Label Grid.Row="0" Content="Mitarbeiter" HorizontalAlignment="Stretch"/>
                        <TextBox Grid.Row="1" x:Name="txtUserSearch" HorizontalAlignment="Stretch"/>
                    </Grid>
                </DataGridTemplateColumn.Header>
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                    <!-- entfernt zur Verbesserung der Übersichtlichkeit -->
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>
        </DataGrid.Columns>
    </DataGrid>
    Aber die TextBox bleibt leider immer nur genau so groß, wie der Text des Labels...

    Bin für Vorschläge offen, danke
    PHP rocks!
    Eine Initiative der PHP Community

  • #2
    Das Internet schlägt vieles vor. Das simpelste ist möglicherweise anstatt eines Labels einfach einen TextBlock zu nehmen. Alternativen wären Spielereien mit Viewbox(en)

    https://stackoverflow.com/questions/...make-it-center

    Comment


    • #3
      Originally posted by Ralf Jansen View Post
      Das Internet schlägt vieles vor.
      Das ist wohl richtig, fand aber selber keine Lösung, die bei mir funktioniert hat.

      Originally posted by Ralf Jansen View Post
      Das simpelste ist möglicherweise anstatt eines Labels einfach einen TextBlock zu nehmen.
      Das funktioniert genauso wenig, hatte ich als erste Variante, bin aber dann zu einem Label gesprungen.

      Originally posted by Ralf Jansen View Post
      Alternativen wären Spielereien mit Viewbox(en)
      https://stackoverflow.com/questions/...make-it-center
      Ach guck... Das habe ich gar nicht au der Palette gehabt und bin auch bei den Suchen nicht drüber gestopert, das werde ich morgen früh gleich mal testen!

      Danke!


      PHP rocks!
      Eine Initiative der PHP Community

      Comment


      • #4
        Die Viewbox ist ein guter Ansatz, aber verhält sich zu sehr responsive, was in meinem Fall stört.

        Aktueller XAML Code:
        HTML Code:
        <DataGridTemplateColumn.Header>
            <Viewbox StretchDirection="DownOnly">
                <StackPanel>
                    <TextBlock Text="Mitarbeiter"/>
                    <TextBox x:Name="txtInstantSearchPersonio" HorizontalAlignment="Stretch" TextChanged="evh_InstantFilterChanged"/>
                </StackPanel>
            </Viewbox>
        </DataGridTemplateColumn.Header>
        Es spielt auch keine Rolle, ob ich da noch ein Grid oder ein Label oder sonst was rum baue, das Verhalten bleibt immer gleich ( ich kann keine Bilder hochladen, daher der Link ): https://pasteboard.co/BRTfrs1rdlF8.jpg
        Explizite Font-Größen, sowie Width und Height liefern ähnlich unbrauchbare Ergebnisse


        EDIT: Damit nicht der Eindruck entsteht, dass es sich um CrossPosting handelt, hier der Hinweis, dass ich den aktuellen Stand eben bei SO angelegt habe: https://stackoverflow.com/questions/...box-into-width
        Sollte dort eine Lösung kommen, poste ich die hier ebenfalls!
        Zuletzt editiert von Arne Drews; 16.09.2022, 08:33.
        PHP rocks!
        Eine Initiative der PHP Community

        Comment


        • #5
          Tatsächlich aus Verzweiflung selber doch noch eine simple Lösung gefunden.

          Ich habe beide Elemente in ein StackPanel gelegt:
          HTML Code:
          <DataGridTemplateColumn.Header>
              <StackPanel>
                  <TextBlock Margin="0" Padding="0" Text="Mitarbeiter"/>
                  <TextBox HorizontalAlignment="Stretch" TextChanged="evh_InstantFilterChanged"/>
              </StackPanel>
          </DataGridTemplateColumn.Header>
          und habe dann dem DataGrid.ColumnHeaderStyle ganz einfach ein HorizontalContentAlignment=Strech verpasst:
          HTML Code:
              <Style x:Key="style_DataGridColumnHeader" TargetType="DataGridColumnHeader">
                  <Style.Setters>
                      <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
                  </Style.Setters>
              </Style>
          funktioniert einwandfrei und ist übersichtlich.

          Danke trotzdem für sie Anregungen!
          PHP rocks!
          Eine Initiative der PHP Community

          Comment

          Working...
          X