Combobox im Datagrid-Header lässt sich nicht vergrößern

  • WPF

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von a.b_om.

    Combobox im Datagrid-Header lässt sich nicht vergrößern

    Hallöchen,

    habe diesen XAML Code

    XML-Quellcode

    1. <DataGrid x:Name="DG" IsReadOnly="true" ItemsSource="{Binding DtView, Mode=Twoway}" AutoGenerateColumns="False" Margin="0,40,0,0" >
    2. <DataGrid.Columns>
    3. <DataGridTextColumn x:Name="DG_CMB" Binding="{Binding Status}" FontFamily="1234" FontSize="24" >
    4. <DataGridTextColumn.Header>
    5. <xctk:WatermarkComboBox x:Name="CMB_Colum1" Watermark="6789" Width="{Binding ActualWidth, ElementName=DG_CMB}" FontSize="19" />
    6. </DataGridTextColumn.Header>
    7. </DataGridTextColumn>
    8. </DataGrid.Columns>
    9. </DataGrid>


    Die Watermarkcombobox ist vom XCeed Toolkit.
    Die CMB_Column1 - box soll quasi den Header der spalte ersetzen und die größe natürlich der spaltenbreite anpassen. Kleiner geht es, aber wenn ich die spalte größer mache, bleibt die combox irgendwann stehen..
    es sieht so aus als ob die max breite sich dem text in der combobox anpasst.. also wenn "ABC" drin steht, ist sie kleiner als wenn "ABCDEFG" drin steht.
    habe ich oben etwas vergessen oder einfach einen denkfehler?

    Danke
    Hallo @r0tzi

    Du darfst nicht an die ComboBox ansich denken. Du willst den Header ja "gestretched" haben. Also musst du dies auch am header machen. Alle Controls in diesem Container können dann auch den Platz einnehmen.

    XML-Quellcode

    1. <DataGrid x:Name="DG" IsReadOnly="true" ItemsSource="{Binding DtView, Mode=Twoway}" AutoGenerateColumns="False" Margin="0,40,0,0" >
    2. <DataGrid.Columns>
    3. <DataGridTextColumn x:Name="DG_CMB" Binding="{Binding Status}" FontFamily="1234" FontSize="24">
    4. <DataGridTextColumn.HeaderStyle>
    5. <Style TargetType="{x:Type DataGridColumnHeader}">
    6. <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    7. <Setter Property="ContentTemplate">
    8. <Setter.Value>
    9. <DataTemplate>
    10. <ComboBox FontSize="19"/>
    11. </DataTemplate>
    12. </Setter.Value>
    13. </Setter>
    14. </Style>
    15. </DataGridTextColumn.HeaderStyle>
    16. </DataGridTextColumn>
    17. </DataGrid.Columns>
    18. </DataGrid>


    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    @r0tzi

    Bitte immer ein wenig XAML mitschicken, ich kann ja nicht wissen was du nun hast. Meine Glaskugel ist im Moment beim Jahresservice. 8o

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    XML-Quellcode

    1. <DataGrid x:Name="DG" IsReadOnly="true" ItemsSource="{Binding DtView, Mode=Twoway}" AutoGenerateColumns="False" Margin="0,40,0,0" >
    2. <DataGrid.Columns>
    3. <DataGridTextColumn x:Name="DG_CMB" Binding="{Binding Status}" FontFamily="1234" FontSize="24">
    4. <DataGridTextColumn.HeaderStyle>
    5. <Style TargetType="{x:Type DataGridColumnHeader}">
    6. <Setter Property="HorizontalContentAlignment" Value="Stretch" />
    7. <Setter Property="ContentTemplate">
    8. <Setter.Value>
    9. <DataTemplate>
    10. <ComboBox FontSize="19" x:Name="CMB" KeyDown="CMB_Status"/>
    11. </DataTemplate>
    12. </Setter.Value>
    13. </Setter>
    14. </Style>
    15. </DataGridTextColumn.HeaderStyle>
    16. </DataGridTextColumn>
    17. </DataGrid.Columns>
    18. </DataGrid>


    sorry ;D ... hab der combobox nen namen gegeben... und ein keydown event wo ich etwas überprüfe.. aber er erkennt den namen nicht

    r0tzi schrieb:

    und ein keydown event wo ich etwas überprüfe.. aber er erkennt den namen nicht

    Ja, und da haben wir es wieder. Arbeite mit Binding. Ein KeyDown Event ist so gut wie nie nötig. Überprüfe Werteänderungen im jeweiligen Property der zugrunde liegenden Klasse.
    Innerhalb von Styles kannst du keinen Namen vergeben. Ja, du kannst schon, es bringt dir nur nichts. Ein Style kann ja mehrmals angewandt werden. Dann würde es ja mehrere comboboxen mit dem selben Namen geben - was ja nicht möglich ist. Dennoch kannst du das Event verarbeiten, musst aber die Combobox dann über das Argument sender der Prozedur mittels Cast holen. Aber ich empfehle dennoch dann über Binding zu lösung. Ich weis zwar nicht genau was du vorhast und wozu du das KeyDown benötigst aber ich bin mir fast sicher das sich auch dies mit Binding lösen lässt.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    Hallo @a.b_om

    Nein, der Compiler meckert es nicht an. Warum auch?

    Das ist ein Thema das nicht in diesem thread behandelt werden sollte. Hierfür kannst du gerne einen Diskussionsthread aufmachen wenn du willst. Ist aber garnicht notwendig. Wenn du dir die ersten Kapitel meiner Tutorialreihe duchliest wird es dir klarer. Die WPF ist vom kompletten Konzept auf Binding aufgebaut. Alles andere wäre schlicht Quatsch. CodeBehind kommt nur in gewissen Ausnahmesituationen zum einsatz. Dies ermöglicht auch den Einsatz von Pattern wie MVVM. So, mehr möchte ich hier nicht dazu schreiben da es hier OffTopic wäre. Hat auch nix damit zu tun ob man ein Fan davon ist oder nicht. Es ist Binding optimiert und somit hat alles andere keinen sinn. Wäre das selbe wie wenn du meinst: Warum soll ich fürs schwere Gelände einen Geländewagen kaufen, ich komm mit meinem Renault Twingo ganz gut durch. OK, dann bitte aber nicht wundern wenn du beim nächsten Sandhügel steckenbleibst. ;)

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

    a.b_om schrieb:

    Also mein Compiler meckert, wenn zwei Objekte, Klassen, etc. die gleichen Namen haben.

    Ja, aber nicht wenn in einem Style ein Name vergeben wird - dieser aber nicht im codeBehind verwendbar ist.

    Grüße
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##