将UI元素的绑定宽度设置为另一个UI元素的宽度
问题描述:
我想将列标题的Width
绑定到定义的标头的Width
。但是代码不起作用。如果我明确指定Width
(宽度=“100”),则它工作正常。有人可以点亮一些灯并告诉我下面的代码有什么问题吗?将UI元素的绑定宽度设置为另一个UI元素的宽度
<dataGrid:DataGridTemplateColumn x:Name="pdpCol" Width="100">
<dataGrid:DataGridTemplateColumn.Header>
<Grid HorizontalAlignment="Stretch">
<TextBlock Text="PDP" VerticalAlignment="Center" HorizontalAlignment="Center"
TextWrapping="Wrap" Width="{Binding ElementName=pdpCol,Path=ActualWidth }" TextAlignment="Center" />
</Grid>
</dataGrid:DataGridTemplateColumn.Header>
</dataGrid:DataGridTemplateColumn>
答
检查ActualWidth
正在建立,我认为它会工作,如果你只使用Path=Width
。
答
尝试下面的标记。请注意使用HeaderStyle
来拉伸模板和HeaderTemplate
以实际定义您的Header="PDP"
项目的可视模板。
<dataGrid:DataGridTemplateColumn x:Name="pdpCol" Width="100" Header="PDP">
<dataGrid:DataGridTemplateColumn.HeaderStyle>
<Style TargetType="{x:Type Primitives:DataGridColumnHeader}">
<Setter Property="HorizontalContentAlignment" Value="Stretch" />
<Setter Property="VerticalContentAlignment" Value="Center" />
</Style>
</dataGrid:DataGridTemplateColumn.HeaderStyle>
<dataGrid:DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" TextAlignment="Center" />
</DataTemplate>
</dataGrid:DataGridTemplateColumn.HeaderTemplate>
</dataGrid:DataGridTemplateColumn>
答
取下的TextBlock的HorizontalAlignment="Center"
或属性设置为Stretch
。然后TextBlock将自动消耗所有可用宽度。此外,如果您不显示任何其他文本块,请移除网格并仅使用TextBlock。您还需要直接设置HeaderTemplate而不是Header。
<dataGrid:DataGridTemplateColumn x:Name="pdpCol" Width="100" Header="PDP">
<dataGrid:DataGridTemplateColumn.HeaderTemplate>
<DataTemplate>
<TextBlock Text="{Binding}" TextAlign="Center" />
</DataTemplate>
</dataGrid:DataGridTemplateColumn.HeaderTemplate>
</dataGrid:DataGridTemplateColumn>
最好的问候,
奥利弗Hanappi
仅供参考 - 即在一般情况下,不正确。 ActualWidth始终(自动)在UIElement上设置,并且是只读的。很奇怪的是,UIElement的实际宽度。宽度属性可能会或可能不会被设置。 – 2010-04-28 14:43:00
我曾经有过ActualWidth为空而Width是正确值的情况。在与发布的问题非常相似的情况下。 – 2010-04-28 15:58:08