Как я могу сделать столбцы WPF datagrid autoresize с самого начала, чтобы они были видны?

у меня есть datagrid, который имеет столбец (последний), который всегда должен отображаться, когда для него есть место. К сожалению, я не могу этого сделать и не могу найти решение нигде.

Это приложение WPF доступно в портретном и ландшафтном режиме...

при запуске приложения в портретном режиме я хочу, чтобы datagrid всегда показывал последний столбец, но изначально он скрывает несколько столбцов. Но при изменении размера приложения (получение большего ширина), перейдя в пейзаж, а затем обратно в портретный режим, он работает, как ожидалось.

большинство столбцов имеют ширину, равную Auto или *. Только последний столбец имеет минимальную ширину 80 пикселей, потому что я не хочу, чтобы он изменялся, он всегда должен отображаться.

вот настройки сетки:

            <DataGrid Grid.Row="1"
                  AutoGenerateColumns="False"
                  CanUserAddRows="False"
                  CanUserDeleteRows="False"
                  CanUserReorderColumns="False"
                  CanUserResizeColumns="False"
                  CanUserResizeRows="False"
                  CanUserSortColumns="False"
                  HorizontalScrollBarVisibility="Disabled"
                  ItemsSource="{Binding Path=MyCollection,
                                        Mode=OneWay}"
                  RowDetailsVisibilityMode="Collapsed"
                  RowHeaderStyle="{StaticResource ExpanderRowHeaderStyle}"
                  SelectionMode="Single"
                  SelectionUnit="Cell">

вот начальная ситуация в портретном режиме Initial image

затем, когда я изменяю размер на пейзаж:

landscape mode

и, наконец, когда я вернусь в портретный режим, я получу желаемый результат: enter image description here

что я могу изменить, чтобы моя начальная ситуация выглядела как рисунок 3... Так что все столбцы отображаются с самого начала (без изменения размеров)?

EDIT: для ясности: когда я говорю портретный и ландшафтный режим, я имею в виду, что программное обеспечение используется на планшетах windows, но та же проблема встречается и на обычных экранах. Когда окно изначально мало, не все столбцы отображаются, но когда я увеличиваю окно, а затем изменяю его размер до первоначального небольшого размера, все столбцы отображаются.

EDIT 2:

Я могу исправить проблему, если я изменю ширину первого столбца на * Вместо Auto.... Хотя не знаю почему....... Вот полный DataGrid

                        <DataGrid Grid.Row="1"
                  AutoGenerateColumns="False"
                  CanUserAddRows="False"
                  CanUserDeleteRows="False"
                  CanUserReorderColumns="False"
                  CanUserResizeColumns="False"
                  CanUserResizeRows="False"
                  CanUserSortColumns="False"
                  HorizontalScrollBarVisibility="Disabled"
                  ItemsSource="{Binding Path=BstCollection,
                                        Mode=OneWay}"
                  RowDetailsVisibilityMode="Collapsed"
                  RowHeaderStyle="{StaticResource ExpanderRowHeaderStyle}"
                  SelectionMode="Single"
                  SelectionUnit="Cell"
                  EnableRowVirtualization="False" Loaded="DataGrid_Loaded" DataContextChanged="DataGrid_DataContextChanged" ColumnWidth="*">
            <DataGrid.RowStyle>
                <Style TargetType="DataGridRow">
                    <Style.Triggers>
                        <DataTrigger Value="True">
                            <DataTrigger.Binding>
                                <MultiBinding Converter="{StaticResource IsLastOrderToBooleanMultiConverter}">
                                    <MultiBinding.Bindings>
                                        <Binding Mode="OneWay"
                                                 Path="BstCollection[0].BesbstldOp"
                                                 Source="{StaticResource BstGbrModel}" />
                                        <!--  ReSharper disable Xaml.BindingWithContextNotResolved  -->
                                        <Binding Mode="OneWay" Path="BesbstldOp" />
                                        <Binding Mode="OneWay" Path="BesHoeveelheid" />
                                        <!--  ReSharper restore Xaml.BindingWithContextNotResolved  -->
                                    </MultiBinding.Bindings>
                                </MultiBinding>
                            </DataTrigger.Binding>
                            <Setter Property="Background" Value="PowderBlue" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.RowStyle>
            <DataGrid.Columns>
                <DataGridTemplateColumn Width="Auto" Header="{specialLocalization:Translate CtlBstGbr--grdBsten--atlOmschrijving}" IsReadOnly="True">
                    <DataGridTemplateColumn.CellEditingTemplate >
                        <DataTemplate DataType="bl:Bst">
                            <TextBlock Text="{Binding atlOmschrijving, Mode=OneWay}" IsEnabled="False" />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                    <DataGridTemplateColumn.CellTemplate >
                        <DataTemplate DataType="bl:Bst">
                            <TextBlock >
                                <Run Text="{Binding atlOmschrijving, Mode=OneWay}"/>
                                <Run Foreground="Red" Text="{Binding Path=atl.atlVKMat, Mode=OneWay, Converter={StaticResource BooleanToBstTextConverter}}" />
                            </TextBlock>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>

                </DataGridTemplateColumn>
                <DataGridTextColumn Width="Auto"
                                    Binding="{Binding Path=BesbstldOp,
                                                      Mode=OneWay,
                                                      Converter={StaticResource DateToStringValueConverter}}"
                                    Header="{specialLocalization:Translate CtlBstGbr--grdBsten--BesbstldOp}"
                                    IsReadOnly="True" />
                <DataGridTextColumn Width="Auto"
                                    Binding="{Binding Path=BesGeleverdOp,
                                                      Mode=OneWay,
                                                      Converter={StaticResource DateToStringValueConverter}}"
                                    Header="{specialLocalization:Translate CtlBstGbr--grdBsten--BesGeleverdOp}"
                                    IsReadOnly="True" />
                <DataGridTextColumn Width="*"
                                    Binding="{Binding Path=BesHoeveelheid,
                                                      Mode=OneWay,
                                                      Converter={StaticResource IntToStringValueConverter}}"
                                    Header="{specialLocalization:Translate CtlBstGbr--grdBsten--BesHoeveelheid}"
                                    IsReadOnly="True" />
                <DataGridTextColumn Width="Auto"
                                    Binding="{Binding Path=atlbstleenheid,
                                                      Mode=OneWay}"
                                    Header="{specialLocalization:Translate CtlBstGbr--grdBsten--atlbstleenheid}"
                                    IsReadOnly="True" />
                <DataGridTextColumn Width="*"
                                    Binding="{Binding Path=vpeNaam,
                                                      Mode=OneWay}"
                                    Header="{specialLocalization:Translate CtlBstGbr--grdBsten--vpeNaam}"
                                    IsReadOnly="True" />
                <DataGridTemplateColumn Width="*" MinWidth="85" Header="{specialLocalization:Translate CtlBstGbr--grdBsten--NHoevheid}" >
                    <DataGridTemplateColumn.CellTemplate >
                        <DataTemplate DataType="bl:Bst">
                            <TextBlock Text="{Binding NHoevheid, Mode=OneWay}" IsEnabled="{Binding atl.atlVKMat, Mode=OneWay}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                    <DataGridTemplateColumn.CellEditingTemplate>
                        <DataTemplate DataType="bl:Bst">
                            <customControls:UpDownTextBox MinValue="0" Text="{Binding NHoevheid, Mode=TwoWay}"  Visibility="{Binding Path=atl.atlVKMat, Mode=OneWay, Converter={StaticResource BooleanToVisibilityConverter}}"  />
                        </DataTemplate>
                    </DataGridTemplateColumn.CellEditingTemplate>
                </DataGridTemplateColumn>


            </DataGrid.Columns>
            <DataGrid.RowDetailsTemplate>
                <DataTemplate DataType="bl:Bst">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" />
                        </Grid.RowDefinitions>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="*" />
                        </Grid.ColumnDefinitions>
                        <Label Grid.Row="0"
                               Grid.Column="0"
                               Content="{specialLocalization:Translate CtlBstGbr--lblatl--}" />
                        <TextBox Grid.Row="0"
                                 Grid.Column="1"
                                 IsReadOnly="True"
                                 Text="{Binding Path=atlOmschrijving,
                                                Mode=OneWay}" />
                        <Label Grid.Row="1"
                               Grid.Column="0"
                               Content="{specialLocalization:Translate CtlBstGbr--lblInfo--}" />
                        <TextBox Grid.Row="1"
                                 Grid.Column="1"
                                 Height="75"
                                 AcceptsReturn="True"
                                 IsReadOnly="True"
                                 Text="{Binding Path=atl.ArtInfo,
                                                Mode=OneWay}"
                                 TextWrapping="WrapWithOverflow"
                                 VerticalScrollBarVisibility="Visible" />
                    </Grid>
                </DataTemplate>
            </DataGrid.RowDetailsTemplate>
        </DataGrid>

1 ответов


убедитесь, что ширина первого столбца равна "*". Ширина "авто", сделает ширину первого столбца инициализировать на полную ширину содержимого.