【问题标题】:Center text in textblock inside listview wpf在listview wpf内的文本块中居中文本
【发布时间】:2016-09-15 21:19:23
【问题描述】:

我的 ListView 中的 TextBlock 有问题,我无法通过 textblock 填充整行并将文本设置在其中心。如果这在 Wpf 中是可能的?

这是我的 listView 代码

   <ListView.View>
            <GridView>
                <GridViewColumn>
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                            <TextBlock>
                                <Run Text="{Binding cityName, Mode=OneWay}"/>
                                <Run Text=" "/>
                                <Run Text="{Binding strFullName, Mode=OneWay}"/>
                                <Run Text=" "/><Run Text=" "/>
                                <Run Text="{Binding strHouseNo, Mode=OneWay}"/>
                                <Run Text=" "/>
                             </TextBlock>
                            </StackPanel>
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

【问题讨论】:

标签: wpf xaml


【解决方案1】:

你在这里做错了很多事情

  • 除非您需要 Grid,否则您不需要 GridView
  • 您不需要堆栈面板来托管单个控件
  • 水平堆栈面板将项目排列成列而不是行 无论如何,“中心线”毫无意义
  • 你没有设置listview的Horizo​​ntalContentAlignment,这个 默认为左,您需要“Center”或“Stretch”
  • 你没有设置TextBlock的TextAlignment

把所有这些放在一起,你就得到了这个

<ListView HorizontalContentAlignment="Stretch">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock TextAlignment="Center">
               <Run Text="{Binding cityName, Mode=OneWay}"/>
               <Run Text=" "/>
               <Run Text="{Binding strFullName, Mode=OneWay}"/>
               <Run Text=" "/><Run Text=" "/>
               <Run Text="{Binding strHouseNo, Mode=OneWay}"/>
               <Run Text=" "/>
            </TextBlock>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

这将集中您的文本

我也不完全确定你是否正确使用了 Run,但你没有提供足够的信息来确定这两种方式,但我怀疑你想要 &lt;LineBreak/&gt; 而不是 &lt;Run Text=" "/&gt;

或

如果这是构建网格的尝试,那么您可能想要这样的东西

<ListView >
    <ListView.ItemContainerStyle>
        <Style TargetType="ListViewItem">
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListView.ItemContainerStyle>
    <ListView.View>
        <GridView>
            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding cityName, Mode=OneWay}" TextAlignment="Center"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding FullName, Mode=OneWay}" TextAlignment="Center"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
            <GridViewColumn>
                <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding strHouseNo, Mode=OneWay}" TextAlignment="Center"/>
                    </DataTemplate>
                </GridViewColumn.CellTemplate>
            </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

【讨论】:

  • 我想第一个版本,运行 text =" " 是在一行中分隔文本。一般来说,我找到了一个解决方案,有人在列表视图中使用网格,那是我开始做我的应用程序的时候。现在我正在尝试整理代码并升级它。 Arigato MikeT (^^)/
猜你喜欢
  • 2011-07-03
  • 1970-01-01
  • 2017-01-23
  • 2014-03-23
  • 2013-08-31
  • 1970-01-01
  • 2015-09-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多