我有一个RadGridView(Telerik),它有一些列。在行详细信息模板中,我有另一个网格视图,显示具有相同列的子项。这适用于初始显示,但我希望详细信息模板的列宽遵循主网格的宽度(详细信息模板没有标题)。
我尝试给主列命名并绑定到' 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>
如您所见,它正确更新了文本块,因此绑定正确,但列宽度未更新。
答案 0 :(得分:1)
有没有办法将一个
RadGridView
上列的宽度绑定到另一个RadGridView
上的列宽?
是。您可以定义RowStyle
,将Tag
的{{1}}属性绑定到父GridViewRow
,然后使用此属性绑定到RadGridView
的{{1}}集合。网格。以下是您的示例:
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>
,但以相同的方式绑定列宽并不会做任何事情。
是的,因为列本身不是可视树的一部分。然后你必须编写一些代码。您只需处理内部Textblock
的{{1}}事件:
Loaded
<强> XAML:强>
RadGridView
这是更清洁,并没有打破任何模式。