C# 获取数据网格宽度

C# 获取数据网格宽度,c#,wpf,binding,datagrid,C#,Wpf,Binding,Datagrid,我的问题是,我在datagrid中填充了如下代码: (...) while (rdr.Read()) { dataGrid1.Items.Add(new Produkt { nazwa = rdr.GetString(rdr.GetOrdinal("nazwa")), cena = rdr.GetString(rdr.GetOrdinal("cena")), kod = rdr.GetStri

我的问题是,我在datagrid中填充了如下代码:

(...)
                while (rdr.Read())
                {
                    dataGrid1.Items.Add(new Produkt { nazwa = rdr.GetString(rdr.GetOrdinal("nazwa")), cena = rdr.GetString(rdr.GetOrdinal("cena")), kod = rdr.GetString(rdr.GetOrdinal("kod")) });

                }
(...)
但在我声明datagrid中的所有列之前:

    DataGridTextColumn col1 = new DataGridTextColumn();
    DataGridTextColumn col2 = new DataGridTextColumn();
    DataGridTextColumn col3 = new DataGridTextColumn();
    dataGrid1.Columns.Add(col1);
    dataGrid1.Columns.Add(col2);
    dataGrid1.Columns.Add(col3);
    col1.Binding = new Binding("nazwa");
    col2.Binding = new Binding("cena");
    col3.Binding = new Binding("kod");
    col1.Header = "nazwa";
    col2.Header = "cena";
    col3.Header = "kod";
现在我添加了按输入文本过滤,所以在datagrid下有3个文本框(每列),但它们的宽度与datagrid中的列的宽度不同。我尝试过类似于
textbox1.width=datagrid.columns[1].width这样的想法,但这不起作用。
有人知道我的问题的解决办法吗

谢谢你的回答


顺便说一句,我不能像那样声明宽度(f.e.
textbox.width=200

试试这样的方法:

XAML文件:

<Window x:Class="GridAutoWidth.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="*" />
            <RowDefinition Height="30" />
        </Grid.RowDefinitions>
        <DataGrid Name="dgProducts" ItemsSource="{Binding Products}" />

        <Grid Grid.Row="1">
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="{Binding ElementName=dgProducts, Path=Columns[0].ActualWidth}" />
                <ColumnDefinition Width="{Binding ElementName=dgProducts, Path=Columns[1].ActualWidth}" />
                <ColumnDefinition Width="{Binding ElementName=dgProducts, Path=Columns[2].ActualWidth}" />
            </Grid.ColumnDefinitions>            
            <TextBox Grid.Column="0" />
            <TextBox Grid.Column="1" />
            <TextBox Grid.Column="2" />            
        </Grid>
    </Grid>
</Window>
MainViewModel:

using System.Collections.ObjectModel;

namespace GridAutoWidth
{
    class MainViewModel
    {
        public MainViewModel()
        {
            for (int i = 0; i < 10; i++)
            {
                Products.Add(new Product 
                {
                    Name = "Name " + i,
                    Price = (decimal)(18 * (i + 8.4)),
                    Code = "Sample code " + i
                });
            }
        }

        private ObservableCollection<Product> _products = new ObservableCollection<Product>();

        public ObservableCollection<Product> Products
        {
            get { return _products; }
            set { _products = value; }
        }
    }

    public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
        public string Code { get; set; }
    }
}
使用System.Collections.ObjectModel;
命名空间GridAutoWidth
{
类MainViewModel
{
公共主视图模型()
{
对于(int i=0;i<10;i++)
{
产品。添加(新产品)
{
Name=“Name”+i,
价格=(十进制)(18*(i+8.4)),
Code=“示例代码”+i
});
}
}
私有ObservableCollection_products=新ObservableCollection();
公共可观测收集产品
{
获取{return\u products;}
设置{u乘积=值;}
}
}
公共类产品
{
公共字符串名称{get;set;}
公共十进制价格{get;set;}
公共字符串代码{get;set;}
}
}
using System.Collections.ObjectModel;

namespace GridAutoWidth
{
    class MainViewModel
    {
        public MainViewModel()
        {
            for (int i = 0; i < 10; i++)
            {
                Products.Add(new Product 
                {
                    Name = "Name " + i,
                    Price = (decimal)(18 * (i + 8.4)),
                    Code = "Sample code " + i
                });
            }
        }

        private ObservableCollection<Product> _products = new ObservableCollection<Product>();

        public ObservableCollection<Product> Products
        {
            get { return _products; }
            set { _products = value; }
        }
    }

    public class Product
    {
        public string Name { get; set; }
        public decimal Price { get; set; }
        public string Code { get; set; }
    }
}