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

  • Arne Drews
    replied
    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!

    Leave a comment:


  • Arne Drews
    replied
    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.

    Leave a comment:


  • Arne Drews
    replied
    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!


    Leave a comment:


  • Ralf Jansen
    replied
    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

    Leave a comment:

Working...
X