【问题标题】:How to center a TextBlock within a CellTemplate in WPF?如何在 WPF 中的 CellTemplate 中将 TextBlock 居中?
【发布时间】:2011-07-17 00:09:32
【问题描述】:

HorizontalAlignmentTextAlignment 我都试过了,但都没有效果。

<GridViewColumn Width="Auto" Header="Type">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Type}" HorizontalAlignment="Center"  TextAlignment="Center" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

有什么想法吗?

编辑:

Xaml 代码:

<Window x:Class="EffectsWindow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Effects Editor"
    <DockPanel VerticalAlignment="Stretch">
        <DockPanel.Resources>

        <ListView
                  DockPanel.Dock="Top"
                  HorizontalContentAlignment="Stretch"
                  ItemsSource="{Binding EditorViewModel.AllEffects}">

            <ListView.View>
                <GridView>
                    <GridViewColumn Width="Auto"
                                    DisplayMemberBinding="{Binding Name}"
                                    Header="Name" />

                    <GridViewColumn Width="Auto" Header="Type">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Type}" HorizontalAlignment="Center"  TextAlignment="Center" />
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>
                    </GridViewColumn>

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

        <DockPanel Width="100"
                   Height="100"
                   Margin="0,0,20,20"
                   HorizontalAlignment="Right"
                   VerticalAlignment="Bottom">

            <Label Margin="0,0,0,0"
                   Content="Data"
                   DockPanel.Dock="Top" />

            <ListBox
                     VerticalAlignment="Top"/>

        </DockPanel>

    </DockPanel>
</Window>

【问题讨论】:

    标签: c# .net wpf listview layout


    【解决方案1】:

    您尝试过 Horizo​​ntalContentAlignment 吗?在柱子上?

    -- 编辑--

    事实证明,要找到放置此 Horizo​​ntalContentAlignment 的正确位置有点困难... :)

    使用这个

    <ListView.Resources>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Center" />
        </Style>
    </ListView.Resources>
    

    在列表视图中。

    Snoop 通常会帮助您走上正确的道路。此 ContentPresenter 由 ListViewItem 使用,它从 ListViewItem 上的 ContentAlignment 中获取其 Alignment。您无法直接访问 ListViewItem,这就是您需要该样式的原因

    以及完整的代码:

    <DockPanel VerticalAlignment="Stretch">
    
            <ListView 
              DockPanel.Dock="Top"
              HorizontalContentAlignment="Stretch"
              x:Name="MyListView">
            <ListView.Resources>
                <Style TargetType="ListViewItem">
                    <Setter Property="HorizontalContentAlignment" Value="Center" />
                </Style>
    
            </ListView.Resources>
                <ListView.View>
                    <GridView >
    
                        <GridViewColumn Width="Auto"
                                DisplayMemberBinding="{Binding Name}"
                                Header="Name" />
    
                        <GridViewColumn Width="Auto" Header="Type">
    
                            <GridViewColumn.CellTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding Type}" HorizontalAlignment="Center"  TextAlignment="Center" />
                                </DataTemplate>
                            </GridViewColumn.CellTemplate>
                        </GridViewColumn>
    
                    </GridView>
                </ListView.View>
            </ListView>
    
            <DockPanel Width="100"
               Height="100"
               Margin="0,0,20,20"
               HorizontalAlignment="Right"
               VerticalAlignment="Bottom">
    
                <Label Margin="0,0,0,0"
               Content="Data"
               DockPanel.Dock="Top" />
    
                <ListBox
                 VerticalAlignment="Top"/>
    
            </DockPanel>
    
    </DockPanel>
    

    【讨论】:

    • 感谢 Elad,当我输入它时,它告诉我它在 GridColumnView 上找不到 Horizo​​ntalContentAlignment 属性。
    • 试试 Snoop,看看你有什么问题。途中应该有一些元素设置不正确。或者粘贴完整代码(xaml & cs)
    • 琼 - 这通常可以帮助你走上正确的道路。此 ContentPresenter 由 ListViewItem 使用,它从 ListViewItem 上的 ContentAlignment 中获取其 Alignment。你不能直接访问 ListViewItem,这就是为什么你需要那个 Style
    • 全部。除了使用“蛮力”方法(即使用 VisualTreeHelper 并检查 VisualTree DOM 中的特定元素)之外,我不知道其他方法
    • 这就是生活 :) 然而,你可以使用 DataGrid,这是一个更好的控制,你可以控制那里的任何东西
    【解决方案2】:

    很遗憾,无法在CellTemplate 内调整TextBlocks 的水平对齐方式。 因为GridViewRowPresenterCellsHorizontalAlignment 属性设置为HorizontalContentAlignmentHorizontalContentAlignment,在本例中为ListViewItem

    所以你将不得不改变你的ListViewItemStyle

    如果您使用 snoop 更改 ListViewItemHorizontalContentAlignment,您将看到单元格的对齐方式不会受到影响,因为在创建单元格时设置了 HorizontalContentAlignment 值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-02
      • 1970-01-01
      • 2011-07-15
      • 1970-01-01
      相关资源
      最近更新 更多