Невозможно увидеть вертикальную полосу прокрутки в datagrid при размещении внутри сетки в WPF

#wpf #xaml #c#-4.0 #wpf-controls #wpfdatagrid

#wpf #xaml #c # -4.0 #wpf-элементы управления #wpfdatagrid

Вопрос:

За последние 2 дня я застрял в небольшой проблеме, которую я не знаю, почему я не смог ее решить. Я много раз вытаращил глаза и реализовал различные предложения, предоставленные stack overflow, чтобы решить проблему, но, наконец, я устал от неудачной реализации.

Моя проблема в том, что мне нужна прокручиваемая сетка данных, которую можно было бы разместить внутри элемента управления Grid или DockPanel (как я пробовал с обоими). Ниже приведен код, который я использую.

 <Grid IsEnabled="{Binding IsCalcVarGridPartEnable}">
    <Grid.Resources>
        <BooleanToVisibilityConverter x:Key="boolToVisiblityConverter" />
        <sys.converters:BoolToVisibleHiddenConvertor x:Key="boolToVisibleHiddenConvertor"/>
        <FrameworkElement x:Key="ProxyElement"
                     DataContext="{Binding}"/>
    </Grid.Resources>
    <Grid.RowDefinitions>
        <RowDefinition Height="30" />
        <RowDefinition Height="*" />
        <RowDefinition Height="30"/>
    </Grid.RowDefinitions>
    <Border Style="{StaticResource SeperatorStyle}" Grid.Row="0">
        <TextBlock Style="{StaticResource BannerTextStyle}" Text="Calculation Variable" />
    </Border>

    <Border Style="{StaticResource SeperatorStyle}" Grid.Row="2">
        <Button Content="Edit" HorizontalAlignment="Right" Margin="10,5" Command="{Binding EditCalcVarCmd}" />
    </Border>

    <ContentControl Visibility="Collapsed"
            Content="{StaticResource ProxyElement}"/>

    <DataGrid AutoGenerateColumns="False" 
              Name="dataGridCalcVar" 
              VerticalAlignment="Top"
              HorizontalAlignment="Left"
              IsReadOnly="True"                       
              SelectionMode="Single" 
              SelectionUnit="FullRow"                  
              ItemsSource="{Binding CalcVarCollection}"
              SelectedItem="{Binding SelectedCalcVar}"
              HorizontalScrollBarVisibility="Auto"
              VerticalScrollBarVisibility="Auto"                                    
                  >
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="MouseDoubleClick" >
                <i:InvokeCommandAction Command="{Binding CalcVarDoubleClickedCmd}" />
            </i:EventTrigger>
        </i:Interaction.Triggers>
        <DataGrid.ColumnHeaderStyle>
            <StaticResourceExtension ResourceKey="DataGridColumnHeaderStyle" />
        </DataGrid.ColumnHeaderStyle>
        <DataGrid.CellStyle>
            <StaticResourceExtension ResourceKey="DataGridCellStyle" />
        </DataGrid.CellStyle>
        <DataGrid.Columns>
            <DataGridTextColumn Header="Type Description" MinWidth="150" MaxWidth="200" Binding="{Binding CalcTypName}" />
            <DataGridTextColumn Header="Variable Description" MinWidth="150" MaxWidth="200" Binding="{Binding CalcVarName}" />
            <DataGridTextColumn Header="Major Description" MinWidth="150" MaxWidth="200" Binding="{Binding MjAcctTypDesc}" 
                                Visibility="{Binding DataContext.IsMjMiAcctTypVisible, Source={StaticResource ProxyElement},
                                Converter={StaticResource boolToVisibleHiddenConvertor}}" />
            <DataGridTextColumn Header="Minor Description" MinWidth="150" MaxWidth="200" Binding="{Binding MiAcctTypDesc}" 
                                Visibility="{Binding DataContext.IsMjMiAcctTypVisible, Source={StaticResource ProxyElement},
                                Converter={StaticResource boolToVisibleHiddenConvertor}}" />
            <DataGridTextColumn Header="DNA Value" MinWidth="50" MaxWidth="200" Binding="{Binding CalcVarValueName}" />
            <DataGridTextColumn Header="Critical Value" MinWidth="50" MaxWidth="200" Binding="{Binding CriticalValueName}" />
            <DataGridTextColumn Header="Note" MinWidth="150" MaxWidth="200" Binding="{Binding Note}" />
        </DataGrid.Columns>
    </DataGrid>

    <sysclient:PartStatusView Grid.RowSpan="5" Grid.ColumnSpan="7"
        Style="{DynamicResource PartStatusViewDefaultStyle}" IsTabStop="False"/>
</Grid>
 

Важно: я могу получить полосу прокрутки только тогда, когда я устанавливаю максимальную высоту элемента управления Datagrid, но я не хочу устанавливать свойство max-height для элемента управления row или datagrid. Я хочу, чтобы при изменении размера окна или любого доступного пространства datagrid устанавливался в это пространство, и когда мы запрашиваем данные, тогда, если данные данных превышают доступное пространство, тогда сетка данных выводит вертикальную полосу прокрутки.

Пожалуйста, помогите мне!!!!!

Надеюсь, я смогу объяснить свою проблему. 🙂 🙂

Спасибо,

Комментарии:

1. Где это Grid размещено / используется? Случайно ли один из родителей этого Grid a StackPanel ?

2. Родительским элементом grid является пользовательский элемент управления.

3. И что является причиной этого UserControl ? Поднимитесь по визуальному дереву и посмотрите, есть ли у вас где-нибудь на этом пути элемент управления, подобный StackPanel или Canvas

4. На самом деле я использую элемент управления framework, предоставляемый основными разработчиками. Итак, должна быть панель или элемент управления содержимым.

Ответ №1:

Из того, что я вижу, есть два атрибута, которые могут вам здесь помочь

добавить Grid.Row="1" в вашу сетку данных

удалить VerticalAlignment="Top" из того же, что фактически мешает ему брать высоту из контейнера

например

 <DataGrid AutoGenerateColumns="False" 
          Name="dataGridCalcVar" 
          Grid.Row="1"
          HorizontalAlignment="Left"
          IsReadOnly="True"                       
          SelectionMode="Single" 
          SelectionUnit="FullRow"                  
          ItemsSource="{Binding CalcVarCollection}"
          SelectedItem="{Binding SelectedCalcVar}"
          HorizontalScrollBarVisibility="Auto"
          VerticalScrollBarVisibility="Auto">
 

Я предполагаю, что вы хотите разместить сетку в средней строке, которая занимает оставшееся пространство.

Комментарии:

1. Это решение не сработало. Высота сетки данных увеличивается, чтобы отобразить все данные, но полоса прокрутки не отображается.

2. я проверил, что она работает так, как ожидалось, все, что я не смог протестировать, — это любые имеющиеся у вас стили и шаблоны. возможно ли опубликовать рабочий пример вашего кода, который показывает эту проблему?