如何在GridViewColumn中绑定文本对齐方式

时间:2018-10-04 09:32:22

标签: c# wpf datagridviewcolumn

我在WPF应用程序中使用MVVM。我有一个UserControl的{​​{1}}设置为ViewModel。 UserControl是一个包含3列的表格。

enter image description here

这是以下ListView / GridView:

DataContext

这是通过以下资源实现的:

<DockPanel>
        <ListView DockPanel.Dock="Top" ItemsSource="{Binding Items}" ScrollViewer.HorizontalScrollBarVisibility="Disabled"
                  ctrl:ListViewLayoutManager.Enabled="True">
            <ListView.View>
                <GridView>

                    <GridViewColumn Header="{Binding ColumnHeader1}" 
                                    CellTemplate="{StaticResource cellTemplateColumn1}">
                        <GridViewColumn.HeaderContainerStyle>
                            <Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="GridViewColumnHeader">
                                <Setter Property="TextBlock.TextAlignment" Value="{Binding Column1HAlignment}" />
                            </Style>
                        </GridViewColumn.HeaderContainerStyle>
                    </GridViewColumn>

                    <GridViewColumn Header="{Binding ColumnHeader2}" 
                                    CellTemplate="{StaticResource cellTemplateColumn2}">
                        <GridViewColumn.HeaderContainerStyle>
                            <Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="GridViewColumnHeader">
                                <Setter Property="TextBlock.TextAlignment" Value="{Binding Column2HAlignment}" />
                            </Style>
                        </GridViewColumn.HeaderContainerStyle>
                    </GridViewColumn>

                    <GridViewColumn Header="{Binding ColumnHeader3}" 
                                    CellTemplate="{StaticResource cellTemplateColumn3}"
                                    ctrl:RangeColumn.IsFillColumn="True">
                        <GridViewColumn.HeaderContainerStyle>
                            <Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="GridViewColumnHeader">
                                <Setter Property="TextBlock.TextAlignment" Value="{Binding Column3HAlignment}" />
                            </Style>
                        </GridViewColumn.HeaderContainerStyle>
                    </GridViewColumn>

                </GridView>
            </ListView.View>
        </ListView>

    </DockPanel>

可通过视图模型设置每列的文本对齐方式。我可以轻松地对标题执行此操作:

<Style TargetType="GridViewColumnHeader">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="GridViewColumnHeader">
                            <TextBlock Text="{TemplateBinding Content}" Margin="5" Width="{TemplateBinding Width}">
                        </TextBlock>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="FontSize" Value="14" />
        </Style>

        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
            <Setter Property="VerticalAlignment" Value="Stretch" />
            <Setter Property="VerticalContentAlignment" Value="Center" />
        </Style>

        <DataTemplate x:Key="cellTemplateColumn1">
            <fa:ImageAwesome Icon="{Binding IconType}" Foreground="{Binding Status}" Width="10" />
        </DataTemplate>

        <DataTemplate x:Key="cellTemplateColumn2">
            <TextBlock Text="{Binding SerialNumber, StringFormat='0'}" />
        </DataTemplate>

        <DataTemplate x:Key="cellTemplateColumn3">
            <TextBlock Text="{Binding Action}" TextWrapping="Wrap" />
        </DataTemplate>

但是如何传递相同的参数(<GridViewColumn.HeaderContainerStyle> <Style BasedOn="{StaticResource {x:Type GridViewColumnHeader}}" TargetType="GridViewColumnHeader"> <Setter Property="TextBlock.TextAlignment" Value="{Binding Column1HAlignment}" /> </Style> </GridViewColumn.HeaderContainerStyle> )来对齐单元格的Column1HAlignment的内容?

请注意上图中第二列的对齐方式(标题为)。标头通过数据绑定右对齐。我希望每个单元格内容具有相同的绑定。

1 个答案:

答案 0 :(得分:1)

您可以使用HorizontalAlignmentCellTemplate中元素的Column1HAlignment属性绑定到{RelativeSource}源属性:

<DataTemplate x:Key="cellTemplateColumn2">
    <TextBlock Text="{Binding SerialNumber, StringFormat='0'}"
                               HorizontalAlignment="{Binding DataContext.Column1HAlignment, 
                                    RelativeSource={RelativeSource AncestorType=ListView}}"/>
</DataTemplate>