将UI元素上的宽度绑定到另一个UI元素的宽度

时间:2010-04-28 12:15:51

标签: wpf data-binding width

我想将列标题的Width绑定到定义的标头的Width。但是代码不起作用。如果我明确指定Width(宽度=“100”),它可以正常工作。有人能说清楚,并告诉我下面的代码有什么问题吗?

<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>

3 个答案:

答案 0 :(得分:5)

从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>

最诚挚的问候,
Oliver Hanappi

答案 1 :(得分:1)

尝试下面的标记。请注意使用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>

答案 2 :(得分:0)

检查是否设置了ActualWidth,我认为只要您使用Path=Width就行。