【问题标题】:Unable to see vertical scroll bar in datagrid when placed inside grid in WPF当放置在 WPF 中的网格内时,无法在数据网格中看到垂直滚动条
【发布时间】:2014-08-09 17:42:38
【问题描述】:

从过去 2 天开始,我陷入了一个小问题,我不知道为什么我无法解决它。我做了很多工作,并实施了堆栈溢出提供的各种建议来解决问题,但最后我因实施不成功而感到厌倦。

我的问题是我想要一个可滚动的数据网格,它可以放置在 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 控件的最大高度但我不想设置行或 datagrid 控件的 max-height 属性时,我才能获得滚动条。我希望当我调整窗口大小或任何可用空间时,将数据网格设置到该空间中,当我们查询数据时,如果数据数据大于可用空间,则数据网格会带来垂直滚动条。

请帮帮我!!!!!!

我希望我能够解释我的问题。 :-) :-)

谢谢,

【问题讨论】:

  • 这个Grid在哪里放置/使用? Grid 的父母之一是 StackPanel 吗?
  • 网格的父级是用户控件。
  • UserControl 的父级是什么?上视觉树,看看你是否有像StackPanelCanvas这样的控制方式
  • 其实我使用的是核心开发者提供的框架控件。所以应该有面板或内容控件。

标签: wpf xaml c#-4.0 wpf-controls wpfdatagrid


【解决方案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">

我假设您想将网格放置在占用剩余空间的中间行。

【讨论】:

  • 此解决方案无效。数据网格高度增加以显示所有数据,但未显示滚动条。
  • 我测试了它是否按预期工作,我无法测试的是您拥有的任何样式和模板。您是否可以发布显示此问题的代码的工作示例?
猜你喜欢
  • 2017-11-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-11
  • 2019-11-08
  • 1970-01-01
  • 2012-01-31
相关资源
最近更新 更多