WPF - 样式 - 在GridView标题中绑定到自身属性

问题描述 投票:-2回答:1

我认为这是一项简单的任务,但我无法弄清楚如何去做,也没有找到解决方案。我有一个简单的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}}" />

但正如预期的那样,它不起作用。如何以正确的方式进行绑定?

c# wpf listview gridview width
1个回答
-1
投票

TextBlock元素不是GridViewColumnHeader的祖先。因此,可能的方法是将Converter添加到绑定。

<Setter 
    Property="MinWidth" 
    Value="{Binding RelativeSource={RelativeSource Self}, Converter={x:Static local:MyGridViewColumnHeaderConverter}}" 
    />

在MyGridViewColumnHeaderConverter中,可以通过VisualTreeHelper查找子项并返回已创建的TextBlock的ActualWidth。

© www.soinside.com 2019 - 2024. All rights reserved.