如何根据DataGrid列更新文本框?

时间:2018-04-24 17:01:59

标签: wpf datagrid textbox

我试图用DataGrid列实现一些技巧。在我的设计中,我在网格列后面有一个TextBox。如果我调整该列的大小意味着我必须更改大小,如果文本框与我的列相关。我已经通过使用更新布局事件并在转换器的帮助下使用元素名称绑定来尝试它。但是我无法通过我的概念实现它。宽度和布局过程仅在使用右侧夹点调整列标题大小时发生。

请找到我的代码段

 <Grid>
        <StackPanel Width="600">
        <DataGrid Name="dataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Orders}" ColumnWidth="*">
            <DataGrid.Columns>
                <DataGridTextColumn Binding="{Binding OrderID}" Header="ID"/>
                <DataGridTextColumn Binding="{Binding CustomerID}" Header="C.ID" Width="150"/>
                <DataGridTextColumn Binding="{Binding CustomerName}" Header="c.Name" Width="150"/>
            </DataGrid.Columns>
        </DataGrid>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="*"/>
                    <ColumnDefinition Width="Auto"/>
                    <ColumnDefinition Width="Auto"/>
                </Grid.ColumnDefinitions>
                <TextBox Height="20" Grid.Column="1" Width="150" Name="txtBox"/>
            </Grid>
        </StackPanel>
    </Grid>

C#

public MainWindow()
{
    InitializeComponent();
    dataGrid.LayoutUpdated += DataGrid_LayoutUpdated;

}

private void DataGrid_LayoutUpdated(object sender, EventArgs e)
{
    txtBox.Width= Convert.ToDouble(dataGrid.Columns[2].Width.Value);
}

1 个答案:

答案 0 :(得分:0)

你可以在xaml中完成所有这些操作。为列添加名称并将TextBox Width属性绑定到datagrid列的ActualWidth属性

<Grid>
    <StackPanel Width="600">
    <DataGrid Name="dataGrid" AutoGenerateColumns="False" ItemsSource="{Binding Orders}" ColumnWidth="*">
        <DataGrid.Columns>
            <DataGridTextColumn x:Name="ID" Binding="{Binding OrderID}" Header="ID"/>
            <DataGridTextColumn Binding="{Binding CustomerID}" Header="C.ID" Width="150"/>
            <DataGridTextColumn Binding="{Binding CustomerName}" Header="c.Name" Width="150"/>
        </DataGrid.Columns>
    </DataGrid>
        <Grid>
            <Grid.ColumnDefinitions>
                <ColumnDefinition Width="*"/>
                <ColumnDefinition Width="Auto"/>
                <ColumnDefinition Width="Auto"/>
            </Grid.ColumnDefinitions>
            <TextBox Height="20" Grid.Column="1" Name="txtBox" Width="{Binding ActualWidth, ElementName=ID}"/>
        </Grid>
    </StackPanel>
</Grid>