RadGridView 将列宽绑定到另一列?

RadGridView Bind Column Width to Another Column?

我有一个 RadGridView (Telerik),它有一些列。在行详细信息模板中,我有另一个显示具有相同列的 sub-items 的网格视图。这对于初始显示非常有效,但我希望详细信息模板的列宽遵循主网格的宽度(详细信息模板没有 headers)。

我尝试给主列一个名称并按名称绑定到该列的 'Width' 和 'ActualWidth' 属性,但它似乎没有采取也没有给出任何绑定错误。

有没有办法将一个 RadGridView 上的列宽绑定到另一个 RadGridView 上的列宽?

编辑

根据下面的建议,我尝试将视图绑定到标签并按照这种方式进行,但它似乎不起作用。它适用于文本块,但不设置列宽。这是我看到的视频:

https://www.screencast.com/t/BiHmiarQExV

这是我使用的代码:

    <telerik:RadGridView Grid.Row="2" ItemsSource="{Binding RenumberNotes}" x:Name="tgr" AutoGenerateColumns="False"
                         RowDetailsVisibilityMode="Visible">
        <telerik:RadGridView.Columns>
            <telerik:GridViewDataColumn UniqueName="columnName" DataMemberBinding="{Binding CurrentValue}" Width="100" />
        </telerik:RadGridView.Columns>
        <telerik:RadGridView.RowStyle>
            <Style TargetType="telerik:GridViewRow" BasedOn="{StaticResource {x:Type telerik:GridViewRow}}">
                <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=telerik:RadGridView}}" />
            </Style>
        </telerik:RadGridView.RowStyle>
        <telerik:RadGridView.RowDetailsTemplate>
            <DataTemplate>
                <StackPanel>
                    <StackPanel Orientation="Horizontal" Margin="10,10,10,10">
                        <TextBlock Text="Column width: " />
                        <TextBlock
                            Text="{Binding Tag.Columns[columnName].ActualWidth, RelativeSource={RelativeSource AncestorType=telerik:GridViewRow}}" />
                    </StackPanel>
                    <telerik:RadGridView AutoGenerateColumns="False" ItemsSource="{Binding Subnotes}">
                        <telerik:RadGridView.Columns>
                            <telerik:GridViewColumn Header="test" Width="{Binding Tag.Columns[columnName].ActualWidth, RelativeSource={RelativeSource AncestorType=telerik:GridViewRow}}" />
                        </telerik:RadGridView.Columns>

                    </telerik:RadGridView>
                </StackPanel>
            </DataTemplate>
        </telerik:RadGridView.RowDetailsTemplate>
    </telerik:RadGridView>

如您所见,它正确地更新了文本块,因此绑定是正确的,但列宽没有更新。

Is there any way to bind the width of a column on one RadGridView to the width of a column on another RadGridView?

是的。您可以定义一个 RowStyleGridViewRowTag 属性 绑定到父级 RadGridView,然后使用这个绑定到 Columns 集合的格子。这是一个例子:

<telerik:RadGridView x:Name="tgr" AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected">
    <telerik:RadGridView.Columns>
        <telerik:GridViewDataColumn UniqueName="columnName" DataMemberBinding="{Binding Name}" Width="100" />
    </telerik:RadGridView.Columns>
    <telerik:RadGridView.RowStyle>
        <Style TargetType="telerik:GridViewRow" BasedOn="{StaticResource {x:Type telerik:GridViewRow}}">
            <Setter Property="Tag" Value="{Binding RelativeSource={RelativeSource AncestorType=telerik:RadGridView}}" />
        </Style>
    </telerik:RadGridView.RowStyle>
    <telerik:RadGridView.RowDetailsTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal" Margin="10,10,10,10">
                <TextBlock Text="Column width: " />
                <TextBlock Text="{Binding Tag.Columns[columnName].ActualWidth, RelativeSource={RelativeSource AncestorType=telerik:GridViewRow}}" />
            </StackPanel>
        </DataTemplate>
    </telerik:RadGridView.RowDetailsTemplate>
</telerik:RadGridView>

编辑:

It works for a Textblock as you have shown, but binding the column width the same way doesn't seem to do anything.

是的,那是因为列本身不是可视化树的一部分。然后你将不得不编写一些代码。您可以简单地处理内部 RadGridView:

Loaded 事件
private void RadGridView_Loaded(object sender, RoutedEventArgs e)
{
    RadGridView subGridView = (RadGridView)sender;
    subGridView.Columns[0].Width = columnName.Width;
}

XAML:

<telerik:RadGridView Grid.Row="2" ItemsSource="{Binding RenumberNotes}" x:Name="tgr" AutoGenerateColumns="False"
                     RowDetailsVisibilityMode="Visible">
    <telerik:RadGridView.Columns>
        <telerik:GridViewDataColumn x:Name="columnName" DataMemberBinding="{Binding CurrentValue}" Width="100" />
    </telerik:RadGridView.Columns>
    <telerik:RadGridView.RowDetailsTemplate>
        <DataTemplate>
            <telerik:RadGridView AutoGenerateColumns="False" ItemsSource="{Binding Subnotes}" 
                                             Loaded="RadGridView_Loaded">
                <telerik:RadGridView.Columns>
                    <telerik:GridViewColumn Header="test" />
                </telerik:RadGridView.Columns>
            </telerik:RadGridView>
        </DataTemplate>
    </telerik:RadGridView.RowDetailsTemplate>
</telerik:RadGridView>

这更干净,不会破坏任何模式。