我认为这是一项简单的任务,但我无法弄清楚如何做到这一点,也没有找到解决方案。我有一个简单的wpf应用程序,我有一个带有gridview视图的列表视图。我正在对columnheader进行简单的重新设计:
<ListView Margin="5" ItemsSource="{Binding Path=Reservations}" Name="MainListView">
<ListView.Resources>
<Style TargetType="GridViewColumnHeader">
<Setter Property="HorizontalContentAlignment" Value="Left" />
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding}" Padding="5,0" />
</DataTemplate>
</Setter.Value>
</Setter>
<Setter Property="MinWidth" Value="{Binding Path=Content.ActualWidth, RelativeSource={RelativeSource Self}}" />
</Style>
</ListView.Resources>
<ListView.View>
<GridView AllowsColumnReorder="True">
<!-- Columns -->
</GridView>
</ListView.View>
</ListView>
此样式将左侧的标题文本与左侧的4px缩进对齐。
现在我想要实现的是每个列的minwidth属性根据标题中textblock的ActualWidth属性设置。我试图使用样式
中的这段代码来实现这一点<Setter Property="MinWidth" Value="{Binding Path=Content.ActualWidth, RelativeSource={RelativeSource Self}}" />
但正如预期的那样,它不起作用。如何以正确的方式进行绑定?
答案 0 :(得分:-1)
TextBlock元素不是GridViewColumnHeader的祖先。因此,可能的方法是将Converter添加到绑定。
<Setter
Property="MinWidth"
Value="{Binding RelativeSource={RelativeSource Self}, Converter={x:Static local:MyGridViewColumnHeaderConverter}}"
/>
在MyGridViewColumnHeaderConverter中,可以通过VisualTreeHelper查找子项并返回已创建的TextBlock的ActualWidth。