DataGrid vs ScrollViewer

WPF
  1. 6 года назад
    Добавлено 6 года назад RusNekromant

    Прошу прощение за названия тем))))

    Суть, есть tabControl, в нем три tabItem, в каждом по три DataGrid. Не могу нормально скомпоновать.

    Проблема: все это засовываю в Grid все ок все распихивается. 4 строки у грида, ставлю первую строку 30 единиц (там кнопка при 30 единицах выглядит так как нада) остальные через отношение то есть "15*" "2*" "2.5*" Все ок если развернуть на мой экран))))) Но если окно не развернуто на весь экран или если экран не 1024*768 то тупо не помещается и уходит за рамки окна. И добраться до значений никак нельзя. Логичное решение обернуть контейнер Grid в ScrollViewer. И тут встают две проблемы.

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

    2. Скролл то появляется, но колесико мыши перестает прокручивать если не находиться на этом ползунке, что опять нехорошо.

    Вопрос: как убрать эти недостатки?

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

  2. Alexandr_Erohin

    Nov 25 Администратор

    Наверное правильней было бы засунуть ScrollViewer в каждую строку, где находится DataGrid, чтобы можно было прокручивать только ту область которую надо.

  3. Хм, не подумал... ок спасибо приду домой, попробую, отпишусь.

  4. Добавлено 6 года назад Alexandr_Erohin

    Если внутрь контейнера вставить scrollViewer то он не будет работать вообще

    <ScrollViewer Grid.Row="1" Grid.Column="0" HorizontalScrollBarVisibility="Visible" VerticalScrollBarVisibility="Visible" >
                        <DataGrid Name="табМинералы" AutoGenerateColumns="False" ItemsSource="{Binding}" CanUserAddRows="False" LostFocus="таб_LostFocus" CellEditEnding="таб_CellEditEnding"  PreviewMouseDown="таб_PreviewMouseDown" SelectedCellsChanged="таб_SelectedCellsChanged" > <!--  --> 
                        <DataGrid.Columns>
                                <DataGridCheckBoxColumn Header="Выбирать" Binding="{Binding Path=Выбирать}">
                              <!--     <DataGridCheckBoxColumn.ElementStyle>
                                    <Style TargetType="{x:Type CheckBox}" BasedOn="{StaticResource {x:Type CheckBox}}">
                                    </Style>
                                    </DataGridCheckBoxColumn.ElementStyle> -->
                                </DataGridCheckBoxColumn>
                                <DataGridTextColumn Header="Вид руды" IsReadOnly="True"
                                 Binding="{Binding Path=Имя}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Объём одной единицы" IsReadOnly="true"
                                 Binding="{Binding Path=Объём_одной_единицы,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Стек/m3" IsReadOnly="True"
                                 Binding="{Binding Path=Стек,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Tritanium" IsReadOnly="True"
                                 Binding="{Binding Path=Tritanium,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Pyerite" IsReadOnly="True"
                                 Binding="{Binding Path=Pyerite,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Mexallon" IsReadOnly="True"
                                 Binding="{Binding Path=Mexallon,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Isogen" IsReadOnly="True"
                                 Binding="{Binding Path=Isogen,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Nocxium" IsReadOnly="True"
                                 Binding="{Binding Path=Nocxium,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Megacyte" IsReadOnly="True"
                                 Binding="{Binding Path=Megacyte,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Zydrine" IsReadOnly="True"
                                 Binding="{Binding Path=Zydrine,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Morphit" IsReadOnly="True"
                                 Binding="{Binding Path=Morphit,StringFormat={}{0:F2}}"></DataGridTextColumn>
                                <DataGridTextColumn Header="Сумма шт/ISK"
                                 Binding="{Binding Path=Сумма,StringFormat={}{0:## ### ##0.00\ \ISK}}"></DataGridTextColumn>
                            </DataGrid.Columns>
                    </DataGrid>
                    </ScrollViewer>

    Как видно из кода я даже установил постоянно видимый скрол, и его видно но только ползунка нет и без разницы что таблица за экран убежала(((( Сёна поставлю себе Expression Blend мож там чего мне IDE подскажет я хз

  5. Alexandr_Erohin

    Nov 26 Администратор

    Приведите скриншот, чтобы понять в чем изначально была проблема

  6. Добавлено 6 года назад RusNekromant

    -image-

    -image-
    Там кстати целая колонка так и не поместилась. Ща отключены все ScrollViewer, ну кроме стандартного гридовского.

  7. Добавлено 6 года назад RusNekromant

    Проблема решена)))

    <TabItem x:Name="вРасчетныйЛистМинералы" Header="Расчетный лист минералы" GotFocus="вРасчетныйЛистМинералы_GotFocus">
                <!--<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Disabled">-->
                    <Grid x:Name="ТаблицаПрибыли">
                        <!--ShowGridLines="True">-->
                        <!-- Устанавливаем четыре строки -->
                        <Grid.RowDefinitions>
                            <RowDefinition Height="30"></RowDefinition>
                            <RowDefinition Height="*"></RowDefinition>
                        </Grid.RowDefinitions>
                        <!-- Устанавливаем три столбца -->
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>  <!-- ЕСЛИ ПОСТАВИТЬ auto ТО ОН ПЕРЕСТАЕТ ВИДЕТЬ РАМКИ tabitem !!!!!!!!!!!!!!!!!!!! -->
                        </Grid.ColumnDefinitions>
                        <StackPanel Orientation="Horizontal" Grid.Row="0" >
                            <Button x:Name="кнпОбновление" Click="кнпОбновление_Click" Margin="5,2.5,2.5,2.5" Content="Обновить"></Button>
                            <Button x:Name="кнпСвернутьПрибыль" Click="кнпСвернутьПрибыль_Click" Grid.Row="0" Margin="2.5,2.5,2.5,2.5" Content="Свернуть"></Button>
                            <Button x:Name="кнпРазвернутьПрибыль" Click="кнпРазвернутьПрибыль_Click" Grid.Row="0" Margin="2.5,2.5,2.5,2.5" Content="Развернуть"></Button>
                        </StackPanel>
                        <DataGrid VerticalAlignment="Top" HorizontalAlignment="Left" ScrollViewer.HorizontalScrollBarVisibility="Auto" ScrollViewer.VerticalScrollBarVisibility="Auto" x:Name="табПрибыль" Grid.Row="1" Grid.Column="0" AutoGenerateColumns="False" ItemsSource="{Binding}" IsReadOnly="true">
                            <DataGrid.Columns>
                                .............................................................................
                        </DataGrid.Columns>
                </DataGrid>
                    </Grid>
                <!--</ScrollViewer>-->

    Ну и для DataGrid нужно установить свойства VerticalAlignment="Top" HorizontalAlignment="Left"
    </TabItem>

  8. Визуально хочется разделить гриды хотя бы border- ом. Уж слишком близко друг другу они скомпанованы.

  9. Найти это сообщение DMN Визуально хочется разделить гриды хотя бы border- ом. Уж слишком близко друг другу они скомпанованы.

    Благодарю, наверное стоит что то "проложить" возможно просто выставить Margent или Padding.

или зарегистрируйтесь чтобы ответить