Laden...

[gelöst] Im DataGrid die Breite voll ausnutzen mit width=*?

Erstellt von dila71 vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.610 Views
D
dila71 Themenstarter:in
103 Beiträge seit 2005
vor 5 Jahren
[gelöst] Im DataGrid die Breite voll ausnutzen mit width=*?

Hallo,
ich habe folgenden Code:

<Grid>
        <ScrollViewer x:Name="tagsGridScrollViewer" HorizontalScrollBarVisibility="Auto" PreviewMouseWheel="ScrollViewer_PreviewMouseWheel">
            <DataGrid x:Name="tagsGrid" ItemsSource="{Binding}" ScrollViewer.PanningMode="None" 
                            AlternatingRowBackground="LightBlue" AutoGenerateColumns="False" CanUserAddRows="True" IsReadOnly="False" 
                            SelectionMode="Single" BorderThickness="3" SelectionChanged="DataGrid_SelectionChanged" RowStyle="{StaticResource errorRowStyle}">                            
                <DataGrid.Columns>
                    <DataGridTextColumn x:Name="TagName" Header="Tag name" Binding="{Binding Mode=TwoWay, Path=RawTag.TagName, UpdateSourceTrigger=PropertyChanged}" /> 
                    <DataGridTextColumn x:Name="TagCycle" Header="Cycle" >
                        <DataGridTextColumn.Binding>
                            <Binding Path="RawTag.Cycle" NotifyOnValidationError="True" Mode="TwoWay">
                                <Binding.ValidationRules>
                                    <local:CycleValidationRule></local:CycleValidationRule>
                                </Binding.ValidationRules>
                            </Binding>
                        </DataGridTextColumn.Binding>
                    </DataGridTextColumn>
                    <DataGridTextColumn x:Name="TagSource" Header="Source" Binding="{Binding Mode=TwoWay, Path=RawTag.Source}"></DataGridTextColumn>
                    <DataGridTemplateColumn x:Name="editTagColumn" Header="">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <WrapPanel>
                                    <Button x:Name="btnTagDelete" Click="BtnTagDelete_Click" CommandParameter="{Binding}" Height="15" Width="15" Margin="2">
                                        <Button.Content>
                                            <Image Source="../Resources/delete.png"></Image>
                                        </Button.Content>
                                    </Button>
                                </WrapPanel>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                    </DataGridTemplateColumn>
                </DataGrid.Columns>
            </DataGrid>
        </ScrollViewer>
    </Grid>

Ich bekomme alle Spalten als hätte ich Width="auto" gesetzt und eine 5. leere Spalte.

Das Problem an welchem ich mir die Zähne ausbeiße, ich will, dass die Summe der Spalten volle Breite ergibt indem ich die 1. und die 3. Spalte auf "nimm Dir was Du bekommen kannst" also auf Width="*" setzen.

Setze ich das aber, dann sind die 1. und 3. Spalte nicht maximal breit sondern so breit wie die letzte mit dem Button. Eine feste Breite Width="200" o.ä. klappt.

Was verstehe ich an * falsch?

Vielen Dank im Voraus.
Gruß
Dirk

D
6 Beiträge seit 2019
vor 5 Jahren

Hi.
Ich versuche mich direkt mal zu beteiligen.

Macht es denn Sinn in einem GridLayout 2 mal * zu vergeben? Woher soll das Ding denn dann wissen wie groß die 1. Spalte mit * und wie groß die 2. Spalte mit * werden soll.

Ich hab in jedem Layout immer nur 1 * für eine Row und 1 * für eine Column.

Grüße
Daimonion

W
955 Beiträge seit 2010
vor 5 Jahren

Macht es denn Sinn in einem GridLayout 2 mal * zu vergeben? Woher soll das Ding denn dann wissen wie groß die 1. Spalte mit * und wie groß die 2. Spalte mit * werden soll. Na dann halbieren sich beide den vorhandenen Platz.
@dila71: wie ist denn die 5. spalte in der Breite definiert bzw. was soll rauskommen? Sollen sich alle drei den Platz teilen?

D
6 Beiträge seit 2019
vor 5 Jahren

Ah okay, wäre ich jetzt nicht davon ausgegangen.

D
dila71 Themenstarter:in
103 Beiträge seit 2005
vor 5 Jahren

Als Erstes, Sorry, dass ich mich jetzt erst melde, kam gestern irgendwie nicht online.

@witte

Es gibt ja eigentlich keine 5. Spalte, nur wird eben der leere Platz hinten nach der Buttonspalte als solche dargestellt. DIE SOLL WEG.

@Daimonion1980: genau wie witte es geschrieben hat, habe ich es verstanden und will es.
die 2. Spalte DataGridTextColumn x:Name="TagCycle" soll auf Auto nehmen soviel sie braucht, ebenso soll die letzte also 4. Spalte DataGridTemplateColumn x:Name="editTagColumn" nehmen was sie braucht, die 1. und 3. Spalte sollen sich den kompletten restlichen Platz einvernehmen und 1/2 zu 1/2 teilen, so dass es keine 5. Spalte mehr gibt.

Gruß
Dirk

W
955 Beiträge seit 2010
vor 5 Jahren

Das Problem ist dass du ein ScrollViewer um das DataGrid gebaut hast und das Grid sich nun unendlich viel Platz für die *-Spalten nehmen darf.

D
dila71 Themenstarter:in
103 Beiträge seit 2005
vor 5 Jahren

Weg geschmissen läuft... DANKE