Как центрировать TextBlock внутри CellTemplate в WPF? - PullRequest
3 голосов
/ 17 марта 2011

Я пробовал оба HorizontalAlignment и TextAlignment, но это не имеет никакого эффекта.

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

Есть идеи?

EDIT:

Код 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>

Ответы [ 2 ]

7 голосов
/ 17 марта 2011

вы пробовали HorizontalContentAlignment?в столбце?

- РЕДАКТИРОВАТЬ -

получается, что довольно трудно найти правильное место для размещения этого HorizontalContentAlignment ...:)

использовать это

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

в просмотре списка.

Snoop обычно помогает вам быть на правильном пути.Этот ContentPresenter используется ListViewItem, и он получает свое выравнивание из ContentAlignment в ListViewItem.Вы не можете получить прямой доступ к 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>
1 голос
/ 23 января 2013

К сожалению, невозможно отрегулировать горизонтальное выравнивание TextBlocks в пределах CellTemplate.Потому что GridViewRowPresenter устанавливает свойство HorizontalAlignment для Cells равным HorizontalContentAlignment его TemplatedParent, которое в данном случае равно ListViewItem.

Таким образом, вам придется изменить ListViewItemStyle.

Если вы измените HorizontalContentAlignment из ListViewItem, используя snoop, вы увидите, что выравнивание ячейки не будетзатрагивается, поскольку HorizontalContentAlignment значение устанавливается во время создания ячеек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...