如何中心在WPF中CellTemplate内一个TextBlock?中心、WPF、TextBlock、CellTemplate

2023-09-03 22:43:36 作者:desert (荒芜)

我都尝试的Horizo​​ntalAlignment TextAlignment ,但没有任何效果。

 < GridViewColumn宽度=自动标题=类型>
    < GridViewColumn.CellTemplate>
        <的DataTemplate>
            < TextBlock的文本={绑定类型}的Horizo​​ntalAlignment =中心TextAlignment =中心/>
        < / DataTemplate中>
    < /GridViewColumn.CellTemplate>
< / GridViewColumn>
 

任何想法?

编辑:

XAML中code:

 <窗​​口x:类=EffectsWindow.MainWindow
        的xmlns =htt​​p://schemas.microsoft.com/winfx/2006/xaml/$p$psentation
        的xmlns:X =htt​​p://schemas.microsoft.com/winfx/2006/xaml
        标题=效果编辑器
    < D​​ockPanel中VerticalAlignment =拉伸>
        < D​​ockPanel.Resources>

        <的ListView
                  DockPanel.Dock =顶
                  Horizo​​ntalContentAlignment =拉伸
                  的ItemsSource ={结合EditorViewModel.AllEffects}>

            < ListView.View>
                < GridView控件>
                    < GridViewColumn宽度=自动
                                    DisplayMemberBinding ={结合名}
                                    标题=名称/>

                    < GridViewColumn宽度=自动标题=类型>
                        < GridViewColumn.CellTemplate>
                            <的DataTemplate>
                                < TextBlock的文本={绑定类型}的Horizo​​ntalAlignment =中心TextAlignment =中心/>
                            < / DataTemplate中>
                        < /GridViewColumn.CellTemplate>
                    < / GridViewColumn>

                < / GridView的>
            < /ListView.View>
        < / ListView控件>

        < D​​ockPanel中WIDTH =100
                   高度=100
                   保证金=0,0,20,20
                   的Horizo​​ntalAlignment =右
                   VerticalAlignment =底部>

            <标签保证金=0,0,0,0
                   内容=数据
                   DockPanel.Dock =评出的/>

            <列表框
                     VerticalAlignment =热门/>

        < / DockPanel中>

    < / DockPanel中>
< /窗>
 

解决方案

你尝试Horizo​​ntalContentAlignment?在列?

- 编辑 -

原来它是有点难以找到合适的地方把这个Horizo​​ntalContentAlignment ...:)

使用

 < ListView.Resources>
    <风格的TargetType =ListViewItem的>
        < setter属性=Horizo​​ntalContentAlignmentVALUE =中心/>
    < /样式和GT;
< /ListView.Resources>
 
WPF开发中页面加载时DataGrid如何隐藏数据源中DataGridTemplateColumn之外的列

在列表视图。

史努比通常有助于u到在正确​​的道路上。此内容presenter是所使用的ListViewItem的,并因此获得了比对,从上一个ListViewItem的的ContentAlignment。你无法访问ListViewItem的直接,这就是为什么ü需要一个风格

和全code:

 < D​​ockPanel中VerticalAlignment =拉伸>

        <的ListView
          DockPanel.Dock =顶
          Horizo​​ntalContentAlignment =拉伸
          X:名称=MyListView>
        < ListView.Resources>
            <风格的TargetType =ListViewItem的>
                < setter属性=Horizo​​ntalContentAlignmentVALUE =中心/>
            < /样式和GT;

        < /ListView.Resources>
            < ListView.View>
                < GridView控件>

                    < GridViewColumn宽度=自动
                            DisplayMemberBinding ={结合名}
                            标题=名称/>

                    < GridViewColumn宽度=自动标题=类型>

                        < GridViewColumn.CellTemplate>
                            <的DataTemplate>
                                < TextBlock的文本={绑定类型}的Horizo​​ntalAlignment =中心TextAlignment =中心/>
                            < / DataTemplate中>
                        < /GridViewColumn.CellTemplate>
                    < / GridViewColumn>

                < / GridView的>
            < /ListView.View>
        < / ListView控件>

        < D​​ockPanel中WIDTH =100
           高度=100
           保证金=0,0,20,20
           的Horizo​​ntalAlignment =右
           VerticalAlignment =底部>

            <标签保证金=0,0,0,0
           内容=数据
           DockPanel.Dock =评出的/>

            <列表框
             VerticalAlignment =热门/>

        < / DockPanel中>

< / DockPanel中>
 

I tried both HorizontalAlignment and TextAlignment but it has no effect.

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

Any ideas?

EDIT:

Xaml code:

<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>

解决方案

did you try HorizontalContentAlignment? on the column?

-- EDIT --

turns out it's kinda hard to find the right place to put this HorizontalContentAlignment... :)

use this

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

in the listview.

Snoop usually helps u to be on the right path. This ContentPresenter is the used by the ListViewItem, and it gets its Alignment from the ContentAlignment on the ListViewItem. u can't access the ListViewItem directly, and that's why u need that Style

and the full code:

<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>