由Grid包装的WPF DataGrid赢得';t水平滚动

本文关键字:水平 滚动 赢得 包装 Grid WPF DataGrid | 更新日期: 2023-09-27 18:29:26

当窗口太小而无法显示所有列时,我正试图使DataGrid水平滚动。我正在使用网格来控制元素的定位。有人能解释一下为什么滚动条没有出现,以及我如何修复它吗?如果可能的话,我更喜欢只使用XAML的解决方案。

这是我的完整代码。请随意批评你看到的任何奇怪的东西,因为我是WPF的新手。

<Window x:Class="FBLAM.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:FBLAM"
    mc:Ignorable="d"
    Title="MainWindow" Width="800" Height="600">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" />
        <RowDefinition Height="*" />
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width="*" />
    </Grid.ColumnDefinitions>
    <Menu Grid.Row="0" Grid.Column="0" IsMainMenu="True" Height="20" VerticalAlignment="Top">
        Menu Goes Here
    </Menu>
    <Grid Grid.Row="1" Grid.Column="0" HorizontalAlignment="Center" Background="#FFF0F0F0">
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <StackPanel Grid.Column="1" Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
            <Button Content="Button1" HorizontalAlignment="Left" Padding="10,2" VerticalAlignment="Center"/>
            <Button Content="Button2" HorizontalAlignment="Left" Padding="10,2" VerticalAlignment="Center" Margin="10,0,0,0"/>
        </StackPanel>
        <DataGrid 
              Grid.Column="1" 
              Grid.Row="1" 
              x:Name="MemberData" 
              AutoGenerateColumns="False" 
              IsReadOnly="False" 
              CanUserResizeColumns="True" 
              CanUserAddRows="True" 
              CanUserSortColumns="True" 
              ItemsSource="{Binding}" 
              SelectionMode="Single" 
              HeadersVisibility="Column" 
              HorizontalContentAlignment="Stretch" 
              VerticalContentAlignment="Stretch" 
              BorderThickness="0" 
              Margin="0" 
              GridLinesVisibility="Horizontal"
              ScrollViewer.CanContentScroll="True" 
              ScrollViewer.HorizontalScrollBarVisibility="Visible">
            <DataGrid.Columns>
                <DataGridTextColumn Header="ID" Binding="{Binding Id}" />
                <DataGridTextColumn Header="First Name" Binding="{Binding FirstName}" />
                <DataGridTextColumn Header="Last Name" Binding="{Binding LastName}" />
                <DataGridTextColumn Header="School" Binding="{Binding School}" />
                <DataGridTextColumn Header="State" Binding="{Binding State}" />
                <DataGridHyperlinkColumn Header="Email" Binding="{Binding Email}" />
                <DataGridTextColumn Header="Year Joined" Binding="{Binding YearJoined}" />
                <DataGridTextColumn Header="Grade" Binding="{Binding Grade}" />
                <DataGridCheckBoxColumn Header="Active" Binding="{Binding Active}" />
                <DataGridTextColumn Header="Amount Owed" Binding="{Binding AmountOwed, StringFormat=C}" />
            </DataGrid.Columns>
        </DataGrid>
    </Grid>
</Grid>

由Grid包装的WPF DataGrid赢得';t水平滚动

为什么有一个绑定到DataGridActualWidthColumnDefinition?把它取下来。此外,将ScrollViewer属性移动到DataGrid本身。

<Window x:Class="MyProject.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:MyProject"
        mc:Ignorable="d"
        Title="MainWindow" Width="800" Height="600">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <Menu Grid.Row="0" IsMainMenu="True" Height="20" VerticalAlignment="Top">
            //menu items
        </Menu>
        <Grid Grid.Row="1" HorizontalAlignment="Stretch" Background="#FFF0F0F0">
            <Grid.RowDefinitions>
                <RowDefinition Height="Auto" />
                <RowDefinition Height="*" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*" />
                <ColumnDefinition Width="Auto" />
                <ColumnDefinition Width="*" />
            </Grid.ColumnDefinitions>
            <StackPanel Grid.Column="1" Grid.Row="0" Orientation="Horizontal" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
                <Button Content="Button1" HorizontalAlignment="Left" Padding="10,2" VerticalAlignment="Center"/>
                <Button Content="Button2" HorizontalAlignment="Left" Padding="10,2" VerticalAlignment="Center" Margin="10,0,0,0"/>
            </StackPanel>
            <DataGrid Grid.Column="1" 
                      Grid.Row="1" 
                      AutoGenerateColumns="False" 
                      IsReadOnly="False" 
                      CanUserResizeColumns="True" 
                      CanUserAddRows="True" 
                      CanUserSortColumns="True" 
                      ItemsSource="{Binding}" 
                      SelectionMode="Single" 
                      HeadersVisibility="Column" 
                      HorizontalContentAlignment="Stretch" 
                      VerticalContentAlignment="Stretch" 
                      BorderThickness="0" 
                      Margin="0" 
                      GridLinesVisibility="Horizontal"
                      ScrollViewer.CanContentScroll="True" 
                      ScrollViewer.HorizontalScrollBarVisibility="Visible" >
                <DataGrid.Columns>
                    //10 columns here
                </DataGrid.Columns>
            </DataGrid>
        </Grid>
    </Grid>
</Window>

经过一番搜索,我终于找到了导致问题的原因以及如何解决它。

此处:https://social.msdn.microsoft.com/Forums/sqlserver/en-US/e6750a6a-fc94-496e-9a94-10e48831a4d2/simply-want-auto-width-on-control-but-to-have-a-horizontal-scrollbar-if-parent-is-too-narrow?forum=wpf

我只需要在整个网格周围放置一个ScrollViewer。谈论简单!

非常感谢@d.mondada让我走上了正确的道路。