WPF - Expander中的DataGrid没有显示垂直滚动条 [英] WPF - DataGrid inside Expander is not showing vertical scroll bar

查看:90
本文介绍了WPF - Expander中的DataGrid没有显示垂直滚动条的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


我希望有人可以就这个滚动条问题给我一些建议。我在Expander控件中有一个DataGrid控件。 DataGrid
itemsoure绑定到DataTable。当应用程序运行时,溢出内容使水平滚动条可见但垂直滚动条没有显示,即使我可以使用鼠标滚轮垂直向上和向下滚动溢出行。


不幸  我的帐户由于缺乏活动而未经MS验证,因此我无法发布图片以解决问题
但是如果您查看下面的示例代码,您可能能够重现问题,应该 
看到Expander $ b中的DataGrid没有显示垂直滚动条左侧窗格中的$ b。



下面是示例XAML to gener吃了布局。


        

< Window x:Class =" MainWindow"

  &NBSP; &NBSP; &NBSP; xmlns =" http://schemas.microsoft.com/winfx/2006/xaml/presentation"

  &NBSP; &NBSP; &NBSP; xmlns:x =" http://schemas.microsoft.com/winfx/2006/xaml"

  &NBSP; &NBSP; &NBSP; xmlns:d =" http://schemas.microsoft.com/expression/blend/2008"

  &NBSP; &NBSP; &NBSP; xmlns:mc =" http://schemas.openxmlformats.org/markup-compatibility/2006"

  &NBSP; &NBSP; &NBSP; xmlns:local =" clr-namespace:TestExpander"

  &NBSP; &NBSP; &NBSP; mc:Ignorable =" d"

  &NBSP; &NBSP; &NBSP;标题= QUOT;主窗口"&NBSP; &NBSP;身高= QUOT; 800"宽度= QUOT; 1200"&NBSP;装载= QUOT; Window_Loaded" >

  &NBSP; < Grid x:Name =" MainGrid">

  &NBSP; &NBSP; &NBSP; < Grid.RowDefinitions>

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < RowDefinition Height =" *" />

  &NBSP; &NBSP; &NBSP; < /Grid.RowDefinitions>



  &NBSP; &NBSP; &NBSP; < Grid.ColumnDefinitions>

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < ColumnDefinition Width =" auto"  MinWidth =" 50" />

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < ColumnDefinition Width =" 5" />

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < ColumnDefinition Width =" *" />

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < /Grid.ColumnDefinitions>



  &NBSP; &NBSP; &NBSP; < Expander x:Name =" ReportExpander" Grid.Row = QUOT; 0" Grid.Column = QUOT; 0" ExpandDirection = QUOT;左"&NBSP; >



  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < DataGrid x:Name =" ReportDataGrid" CanUserAddRows = QUOT假QUOT;余量= QUOT; 5英寸columnWidth时= QUOT; SizeToHeader" ScrollViewer.VerticalScrollBarVisibility = QUOT;自动" ScrollViewer.Horizo​​ntalScrollBarVisibility = QUOT;自动"
MinColumnWidth =" 100" Width =" {Binding RelativeSource = {RelativeSource Mode = FindAncestor,AncestorType = {x:Type Expander}},Path = ActualWidth}">

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < DataGrid.Resources>



  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < /DataGrid.Resources>



  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / DataGrid>



  &NBSP; &NBSP; &NBSP; < / Expander>

  &NBSP; &NBSP; &NBSP; < GridSplitter Grid.Row =" 0" Grid.Column = QUOT 1 QUOT;宽度= QUOT; 5英寸的Horizo​​ntalAlignment = QUOT;拉伸" />

  &NBSP; &NBSP; &NBSP; < Grid x:Name =" ResultGrid" Grid.Row = QUOT; 0" Grid.Column = QUOT; 2英寸余量= QUOT; 5,8,5,5" >

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < DataGrid x:Name =" ResultDataGrid" CanUserAddRows = QUOT假QUOT;余量= QUOT; 5英寸columnWidth时= QUOT; SizeToHeader" ScrollViewer.VerticalScrollBarVisibility = QUOT;自动" ScrollViewer.Horizo​​ntalScrollBarVisibility = QUOT;自动"
>

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < DataGrid.Resources>



  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < /DataGrid.Resources>



  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; < / DataGrid>

  &NBSP; &NBSP; &NBSP; < / Grid>

  &NBSP; < / Grid>

< / Window>



这是填充数据网格的代码。




Class MainWindow

  &NBSP; Dim table1 As DataTable = New DataTable(" table1")

  &NBSP; Dim table2 As DataTable = New DataTable(" table2")




  &NBSP; Private Sub Window_Loaded(ByVal sender As System.Object,ByVal e As System.EventArgs)




  &NBSP; &NBSP; &NBSP; table1.Columns.Add(New DataColumn(" FirstName")))
  &NBSP; &NBSP; &NBSP; table1.Columns.Add(New DataColumn(" LastName")))
  &NBSP; &NBSP; &NBSP; table1.Columns.Add(New DataColumn(" Description")))


$




  &NBSP; &NBSP; &NBSP;对于i = 0到100

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Dim myRow As DataRow

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; myRow = table1.NewRow

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; myRow.Item(0)=" Ann"

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; myRow.Item(1)=" Kelly"

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; myRow.Item(2)="首先,我们必须使用宽度和高度属性来测量格式化文本。"
$


$
&NBSP; &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; table1.Rows.Add(myRow)

  &NBSP; &NBSP; &NBSP;下一页



  &NBSP; &NBSP; &NBSP; ReportDataGrid.ItemsSource = table1.DefaultView



$
  &NBSP; &NBSP; &NBSP; table2.Columns.Add(New DataColumn(" FirstName")))
  &NBSP; &NBSP; &NBSP; table2.Columns.Add(New DataColumn(" LastName")))
  &NBSP; &NBSP; &NBSP; table2.Columns.Add(New DataColumn(" Description")))


$




  &NBSP; &NBSP; &NBSP;对于i = 0到100

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; Dim myRow As DataRow

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; myRow = table2.NewRow

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; myRow.Item(0)=" Kelvin"

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; myRow.Item(1)=" Smith"

  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; myRow.Item(2)="首先,我们必须使用width和height属性来测量格式化文本。同样,这些属性是与设备无关的单元,必须转换为像素。然后我们就可以创建
RenderTargetBitmap。< b

$
  &NBSP; &NBSP; &NBSP; &NBSP; &NBSP; table2.Rows.Add(myRow)

  &NBSP; &NBSP; &NBSP;下一页



  &NBSP; &NBSP; &NBSP; ResultDataGrid.ItemsSource = table2.DefaultView

  &NBSP;结束子

结束等级


我非常感谢能够帮助我纠正这个滚动条问题的人。



提前谢谢!



- John

解决方案

您好Skydiscovery2014,


根据您的描述,您将DataGrid宽度设置为扩展器宽度,但扩展器宽度为自动,因此Scrollbar不显示,您可以修改如下代码:

< Grid x:Name =" MainGrid"> 
< Grid.ColumnDefinitions>
< ColumnDefinition Width =" Auto" MinWidth = QUOT; 50" />
< ColumnDefinition Width =" 5" />
< ColumnDefinition Width =" 1 *" />
< /Grid.ColumnDefinitions>
< Grid>
< Expander
x:Name =" ReportExpander"
Grid.Column =" 0"
ExpandDirection =" Left">
< DataGrid
x:Name =" ReportDataGrid"
Width =" 300"
Margin =" 5"
CanUserAddRows =" False"
ColumnWidth =" SizeToHeader"
MinColumnWidth =" 100" />
< / Expander>
< / Grid>
< GridSplitter
Grid.Column =" 1"
Width =" 5"
Horizo​​ntalAlignment =" Stretch" />
< Grid
x:Name =" ResultGrid"
Grid.Column =" 2"
保证金=" 5,8,5,5">
< DataGrid
x:Name =" ResultDataGrid"
Margin =" 5"
CanUserAddRows =" False"
ColumnWidth =" SizeToHeader"
ScrollViewer.Horizo​​ntalScrollBarVisibility =" Auto"
ScrollViewer.VerticalScrollBarVisibility =" Auto" />
< / Grid>
< / Grid>



最好的问候,


Cherry



Hi,

I hope someone can give me some advices on this scroll bar problem. I have a have a DataGrid control inside a Expander control. The DataGrid itemsoure is bound to a DataTable. When the application runs, the overflow content makes the horizontal scroll bar visible but the vertical scroll bar is not showing even though I could use the mouse wheel to scroll the overflow rows vertically up and down.

Unfortunately my account has not been verified by MS due to lack of activities so I am not able to post a picture to illurstrate the problem but if you take a look at the sample codes below you may be able to reproduce the problem and should see that the vertical scroll bar is not showing for the DataGrid inside the Expander on the left pane.

Below is the sample XAML to generate the layout.

        

<Window x:Class="MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:TestExpander"
        mc:Ignorable="d"
        Title="MainWindow"   Height="800" Width="1200"  Loaded="Window_Loaded" >
    <Grid x:Name="MainGrid">
        <Grid.RowDefinitions>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>

        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"  MinWidth="50"/>
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="*" />
                  </Grid.ColumnDefinitions>

        <Expander x:Name="ReportExpander" Grid.Row="0" Grid.Column="0" ExpandDirection="Left"  >

            <DataGrid x:Name="ReportDataGrid" CanUserAddRows="False" Margin="5" ColumnWidth="SizeToHeader" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" MinColumnWidth="100" Width="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Expander}}, Path=ActualWidth}">
                <DataGrid.Resources>

                </DataGrid.Resources>

            </DataGrid>

        </Expander>
        <GridSplitter Grid.Row="0" Grid.Column="1" Width="5" HorizontalAlignment="Stretch" />
        <Grid x:Name="ResultGrid" Grid.Row="0" Grid.Column="2" Margin="5,8,5,5" >
            <DataGrid x:Name="ResultDataGrid" CanUserAddRows="False" Margin="5" ColumnWidth="SizeToHeader" ScrollViewer.VerticalScrollBarVisibility="Auto" ScrollViewer.HorizontalScrollBarVisibility="Auto" >
                <DataGrid.Resources>

                </DataGrid.Resources>

            </DataGrid>
        </Grid>
    </Grid>
</Window>

Here's the codes to populate the datagrid.


Class MainWindow
    Dim table1 As DataTable = New DataTable("table1")
    Dim table2 As DataTable = New DataTable("table2")


    Private Sub Window_Loaded(ByVal sender As System.Object, ByVal e As System.EventArgs)


        table1.Columns.Add(New DataColumn("FirstName"))
        table1.Columns.Add(New DataColumn("LastName"))
        table1.Columns.Add(New DataColumn("Description"))




        For i = 0 To 100
            Dim myRow As DataRow
            myRow = table1.NewRow
            myRow.Item(0) = "Ann"
            myRow.Item(1) = "Kelly"
            myRow.Item(2) = "First we have to measure the formatted text, using width and height properties."


            table1.Rows.Add(myRow)
        Next

        ReportDataGrid.ItemsSource = table1.DefaultView


        table2.Columns.Add(New DataColumn("FirstName"))
        table2.Columns.Add(New DataColumn("LastName"))
        table2.Columns.Add(New DataColumn("Description"))




        For i = 0 To 100
            Dim myRow As DataRow
            myRow = table2.NewRow
            myRow.Item(0) = "Kelvin"
            myRow.Item(1) = "Smith"
            myRow.Item(2) = "First we have to measure the formatted text, using width and height properties. Again, those properties are in device independent units and have to be converted into pixel. Then we can create the RenderTargetBitmap."


            table2.Rows.Add(myRow)
        Next

        ResultDataGrid.ItemsSource = table2.DefaultView
    End Sub
End Class

I would greatly appreciate anyone who could help me to correct this scroll bar problem.

Thank you in advance!

-John

解决方案

Hi Skydiscovery2014,

According to your description, you set DataGrid width as Expander width, but you Expander width is Auto, so the Scrollbar is not displaying, you can modify code like this:

<Grid x:Name="MainGrid">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" MinWidth="50" />
            <ColumnDefinition Width="5" />
            <ColumnDefinition Width="1*" />
        </Grid.ColumnDefinitions>
        <Grid>
            <Expander
                x:Name="ReportExpander"
                Grid.Column="0"
                ExpandDirection="Left">
                <DataGrid
                    x:Name="ReportDataGrid"
                    Width="300"
                    Margin="5"
                    CanUserAddRows="False"
                    ColumnWidth="SizeToHeader"
                    MinColumnWidth="100" />
            </Expander>
        </Grid>
        <GridSplitter
            Grid.Column="1"
            Width="5"
            HorizontalAlignment="Stretch" />
        <Grid
            x:Name="ResultGrid"
            Grid.Column="2"
            Margin="5,8,5,5">
            <DataGrid
                x:Name="ResultDataGrid"
                Margin="5"
                CanUserAddRows="False"
                ColumnWidth="SizeToHeader"
                ScrollViewer.HorizontalScrollBarVisibility="Auto"
                ScrollViewer.VerticalScrollBarVisibility="Auto" />
        </Grid>
    </Grid>

Best Regards,

Cherry


这篇关于WPF - Expander中的DataGrid没有显示垂直滚动条的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆