• wpf小技巧——datagrid 滚动条问题


    今天在项目中遇到了一个问题,datagrid 不出现滚动条了,拿出来给大家分享下,以作前车之鉴。

    很简单的布局代码如下

    复制代码
    <Window x:Class="DataGrid_AutoSize.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="500" Width="800">
    <Grid>
    <Grid.ColumnDefinitions>
    <ColumnDefinition Width="376*" />
    <ColumnDefinition Width="402*" />
    </Grid.ColumnDefinitions>
    <Grid.RowDefinitions>
    <RowDefinition Height="65" />
    <RowDefinition Height="396*" />
    </Grid.RowDefinitions>
    <Border BorderBrush="Silver" BorderThickness="1" HorizontalAlignment="Stretch" Margin="5" Name="border1" VerticalAlignment="Top" CornerRadius="5" Height="50" Grid.ColumnSpan="2">
    <TextBlock Name="textBlock1" Text="DataGrid ScrollBar Demo" Margin="15,15,0,0" />
    </Border>
    <Grid Grid.Row="1" HorizontalAlignment="Stretch" Name="grid1" VerticalAlignment="Stretch">
    <DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" x:Name="SrollBarDataGrid">
    <DataGrid.Columns>
    <DataGridTextColumn Width="100" Binding="{Binding id}"/>
    <DataGridTextColumn Width="100" Binding="{Binding text}"/>
    </DataGrid.Columns>
    </DataGrid>
    </Grid>
    <StackPanel Grid.Column="1" Grid.Row="1" HorizontalAlignment="Stretch" Name="stackPanel1" VerticalAlignment="Stretch">
    <DataGrid AutoGenerateColumns="False" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" x:Name="NoSrollBarDataGrid">
    <DataGrid.Columns>
    <DataGridTextColumn Width="100" Binding="{Binding id}"/>
    <DataGridTextColumn Width="100" Binding="{Binding text}"/>
    </DataGrid.Columns>
    </DataGrid>
    </StackPanel>
    </Grid>
    </Window>
    复制代码

    后台代码如下

    复制代码
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Data;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Imaging;
    using System.Windows.Navigation;
    using System.Windows.Shapes;
    using System.ComponentModel;
    using System.Collections.ObjectModel;
    namespace DataGrid_AutoSize
    {
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
    public MainWindow()
    {
    InitializeComponent();
    Init();
    }
    private void Init()
    {

    ObservableCollection<Test> mytestdata = new ObservableCollection<Test>();
    for(int i=0;i<200;i++)
    {
    mytestdata.Add(new Test(){id=i.ToString(), text="name"+i.ToString()});
    }
    SrollBarDataGrid.ItemsSource = mytestdata;
    NoSrollBarDataGrid.ItemsSource = mytestdata;
    }
    }
    class Test
    {
    public string id { get; set; }
    public string text { get; set; }
    }
    }
    复制代码

    运行就可以看到右边的 datagrid不会出现滚动条了 


    原因也比较简单 就是因为右边的布局用了StackPanel

    查了下微软文档http://msdn.microsoft.com/zh-cn/library/ms754213

    可以看出StackPanel实际上是在水平或者垂直方向正无穷大

    导致datagrid认为它的父容器在垂直方向无穷大 所以就没法出现滚动条了

    相信很多人都会出现这类情况 在datagrid外面套stackpanel布局吧

    所以如果想出现滚动条 就千万别在datagrid外面套stackpanel布局 切记切记~~~~~

    小弟才疏学浅,刚刚上手wpf,欢迎大家多交流、批评指正。

  • 相关阅读:
    Android中this.*与*.this还有*.class的区别是什么?
    多线程之CEvent
    Java类型信息之RTTI
    javascript学习-闭包
    javascript学习-对象与原型
    javascript学习-类型判断
    Javascript学习-简单测试环境
    javascript学习-目录
    MySQL数据库安装与配置详解
    深入研究C语言 第四篇
  • 原文地址:https://www.cnblogs.com/yelanggu/p/10444607.html
Copyright © 2020-2023  润新知