绑定datagrid列宽

man*_*ton 10 c# data-binding wpf xaml datagrid

我有两个datagrids,每个都有一列.第一:

<DataGrid.Columns>
   <DataGridTextColumn x:Name="FilterTextCol01" 
                       IsReadOnly="False" 
                       Width="{Binding ElementName=TextCol01, Path=ActualWidth, Mode=TwoWay}" />
</DataGrid.Columns>
Run Code Online (Sandbox Code Playgroud)

第二:

<DataGridTextColumn CellStyle="{StaticResource DataGridColumnContentLeft}"
                    local:DataGridUtil.Name="TextCol01"
                    x:Name="TextCol01"
                    Header="TextCol01"
                    SortMemberPath="TextCol01"
                    Binding="{Binding TextCol01}" 
                    Width="Auto" 
                    IsReadOnly="True"/>
Run Code Online (Sandbox Code Playgroud)

第一列的宽度与第二列的宽度的绑定不起作用.如果我在代码中这样做:

FilterTextCol01.Width = TextCol01.ActualWidth;
Run Code Online (Sandbox Code Playgroud)

有用.谁能告诉我为什么第一种方法不起作用?

H.B*_*.B. 14

因为DataGrid列是抽象对象,不会出现在窗口的逻辑或可视树中.您不能使用它们绑定属性ElementName(这些绑定不需要名称范围).

您可以尝试使用Sourcex:Reference代替,如

{Binding Source={x:Reference TextCol01}, Path=ActualWidth}
Run Code Online (Sandbox Code Playgroud)

  • @manton:不知道,取决于你偶然发现它们,WPF中有很多细节,迟早会有人偶尔遇到,有时甚至在我想的一年或多年之后. (3认同)