繁体   English   中英

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

[英]How to bind text alignment in GridViewColumn

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

在此处输入图片说明

这是以下ListView / GridView:

<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 )以对齐单元格的TextBlock内容?

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM