Wpf Can';无法获取活动的垂直滚动条

Wpf Can';无法获取活动的垂直滚动条,wpf,xaml,datagrid,scrollbar,Wpf,Xaml,Datagrid,Scrollbar,我已经读了很多关于这个问题的帖子,但是在我的要求下,我无法让它工作。我的计算方式可能有一些逻辑上的问题,或者我遗漏了一些关键的细节,但我看不出来 我得到的是一个滚动条,但它似乎是不活动的。我的猜测是,由于标记的缘故,网格呈现为完整的,这使得卷轴感觉不必要。我怎么能让它感觉不一样呢 我希望创建一个显示较长数据网格的窗口,即: 高度固定 在宽度上适合内容 无法调整大小 XAML 我错过了什么?这里的问题是您使用堆栈面板来包装数据网格StackPanel将增长,直到它可以包含整个DataGrid,

我已经读了很多关于这个问题的帖子,但是在我的要求下,我无法让它工作。我的计算方式可能有一些逻辑上的问题,或者我遗漏了一些关键的细节,但我看不出来

我得到的是一个滚动条,但它似乎是不活动的。我的猜测是,由于标记的缘故,网格呈现为完整的,这使得卷轴感觉不必要。我怎么能让它感觉不一样呢

我希望创建一个显示较长数据网格的窗口,即:

  • 高度固定
  • 在宽度上适合内容
  • 无法调整大小
  • XAML

    
    

    我错过了什么?

    这里的问题是您使用
    堆栈面板来包装
    数据网格
    StackPanel
    将增长,直到它可以包含整个
    DataGrid
    ,因此在这种情况下,
    DataGrid
    将其垂直滚动条设置为可见,但实际上其高度已扩展到不需要显示滚动条的程度。如果改为将滚动条可见性设置为
    Auto
    ,您将看到它从未出现过

    您应该使用
    网格
    布局,如下所示:

    <Grid>
       <Grid.RowDefinitions>
           <RowDefinition Height="Auto"/>
           <RowDefinition/>
       </Grid.RowDefinitions>
       <StackPanel Orientation="Horizontal">
         <Button Content="Aaa" Click="Aaa_OnClick" />
         <Button Content="Bbb" Click="Bbb_OnClick" />
       </StackPanel>
       <DataGrid ItemsSource="{Binding Things}"
              VerticalScrollBarVisibility="Visible"
              AutoGenerateColumns="False" Grid.Row="1">     
           <!-- ... -->
       </DataGrid>
    </Grid>
    
    <ScrollViewer VerticalScrollBarVisibility="Visible">
       <StackPanel>
         <StackPanel Orientation="Horizontal">
           <Button Content="Aaa" Click="Aaa_OnClick" />
           <Button Content="Bbb" Click="Bbb_OnClick" />
         </StackPanel>
         <DataGrid ItemsSource="{Binding Things}"              
              AutoGenerateColumns="False"> 
           <!-- ... -->        
         </DataGrid>
      </StackPanel>
    </ScrollViewer>
    

    这里的问题是使用
    StackPanel
    包装
    DataGrid
    StackPanel
    将增长,直到它可以包含整个
    DataGrid
    ,因此在这种情况下,
    DataGrid
    将其垂直滚动条设置为可见,但实际上其高度已扩展到不需要显示滚动条的程度。如果改为将滚动条可见性设置为
    Auto
    ,您将看到它从未出现过

    您应该使用
    网格
    布局,如下所示:

    <Grid>
       <Grid.RowDefinitions>
           <RowDefinition Height="Auto"/>
           <RowDefinition/>
       </Grid.RowDefinitions>
       <StackPanel Orientation="Horizontal">
         <Button Content="Aaa" Click="Aaa_OnClick" />
         <Button Content="Bbb" Click="Bbb_OnClick" />
       </StackPanel>
       <DataGrid ItemsSource="{Binding Things}"
              VerticalScrollBarVisibility="Visible"
              AutoGenerateColumns="False" Grid.Row="1">     
           <!-- ... -->
       </DataGrid>
    </Grid>
    
    <ScrollViewer VerticalScrollBarVisibility="Visible">
       <StackPanel>
         <StackPanel Orientation="Horizontal">
           <Button Content="Aaa" Click="Aaa_OnClick" />
           <Button Content="Bbb" Click="Bbb_OnClick" />
         </StackPanel>
         <DataGrid ItemsSource="{Binding Things}"              
              AutoGenerateColumns="False"> 
           <!-- ... -->        
         </DataGrid>
      </StackPanel>
    </ScrollViewer>
    

    不确定您真正想要的是什么,第三个点不能调整大小意味着它应该具有固定的高度和宽度,因此当然,如果内容大小发生变化,它就不能相应地改变。或者你的意思是尺寸可以改变,但不能通过用户界面(按用户)来改变?完全正确。我希望宽度固定为子项(网格及其边界)的“值”。并且高度应该固定在一个固定的数字上。用户不得触摸尺寸。我现在有这个问题-唯一的问题是垂直滚动是不活动的(禁用,变灰,不可点击)。你的窗口上有ScrollViewer吗?说到滚动条,请尝试使用
    ScrollViewer
    类中的一些附加属性来更改某些行为。@KingKing据我所知,网格(或者更确切地说窗口)默认有一个滚动查看器,使用它是最明智的方法。屏幕上的滚动条也暗示了这一点,尽管它是非活动的。当我开始安装/固定尺寸时,我甚至启动了滚动条并开始工作。现在,我有点困惑。如果您对如何使用scroll viewer控件有任何建议,请随时(事实上,您迫切需要)发布一个示例作为回复。您是指DataGrid by
    grid
    ?因为
    网格
    控件实际上没有scrollviewer。如果可能,请在您的窗口中添加代码,我不认为DataGrid的内部scrollviewer可以无缘无故地轻松禁用。不确定您真正想要的是什么,第三点不能调整大小意味着它应该具有固定的高度和宽度,因此,当然,如果内容大小发生变化,它不能相应地改变。或者你的意思是尺寸可以改变,但不能通过用户界面(按用户)来改变?完全正确。我希望宽度固定为子项(网格及其边界)的“值”。并且高度应该固定在一个固定的数字上。用户不得触摸尺寸。我现在有这个问题-唯一的问题是垂直滚动是不活动的(禁用,变灰,不可点击)。你的窗口上有ScrollViewer吗?说到滚动条,请尝试使用
    ScrollViewer
    类中的一些附加属性来更改某些行为。@KingKing据我所知,网格(或者更确切地说窗口)默认有一个滚动查看器,使用它是最明智的方法。屏幕上的滚动条也暗示了这一点,尽管它是非活动的。当我开始安装/固定尺寸时,我甚至启动了滚动条并开始工作。现在,我有点困惑。如果您对如何使用scroll viewer控件有任何建议,请随时(事实上,您迫切需要)发布一个示例作为回复。您是指DataGrid by
    grid
    ?因为
    网格
    控件实际上没有scrollviewer。如果可能的话,请在你的窗口中添加你所做的代码,我不认为DataGrid的内部scrollviewer可以无缘无故地被禁用。非常好的解释。和+1表示两种方法的示例。我不喜欢使用网格布局(由于某些原因,当我必须为添加的子项指定行和列时,它似乎过时了)。我将尝试使用DockPanel,但如果它不起作用,我将使用外部包装的ScrollViewer。还有比stack、dock和grid更多的容器吗?@KonradViltersten除了stack、dock和grid之外,我们还有UniformGrid、WrapPanel、VirtualzingStackPanel、Canvas和一些其他特殊面板,用于一些控件,包括TabPanel、Toolbar OverflowPanel。您甚至可以创建自己的自定义面板(基于
    panel
    )。事实上,第二个代码使用包装器
    ScrollViewer
    ,只要可以在DataGrid中滚动两个按钮就可以了
    DockPanel
    应该运行良好,不需要额外的ScrollViewer。如果你能使用DockPanel,它可能是你能使用的最好的一个。非常好的解释。和+1表示两种方法的示例。我不喜欢使用网格布局(由于某些原因,当我必须为添加的子项指定行和列时,它似乎过时了)。我给你一个t