WPF中GridViewColumn的文本格式化

5
我想要对GridViewColumn中的列应用格式(文本对齐、货币格式为0000.00)。
 <GridViewColumn TextBlock.TextAlignment="Center" Width="80" DisplayMemberBinding="{Binding XPath=Name}"/>

思路如下:在列(GridViewColumn)中,我们可以对文本应用格式(左对齐、右对齐、居中、两端对齐等)。
以下代码展示了不同的尝试,但都没有获得任何结果。
代码如下:
 <Window x:Class="ListViewTest.Test0.ListViewTest"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="Empty ListView Grid" Height="216" Width="435" FlowDirection="LeftToRight" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.IsSharedSizeScope="False">
    <Window.Resources>
        <XmlDataProvider x:Key="CustomersDS" Source="C:\data.xml"/>
        <Style x:Key="myHeaderStyle" TargetType="{x:Type GridViewColumnHeader}">
            <Setter Property="Visibility" Value="Collapsed" />
        </Style>
    </Window.Resources>



    <ListView Margin="0,0,0,50" ItemTemplate="{DynamicResource CustomerTemplate}" ItemsSource="{Binding Source={StaticResource CustomersDS}, XPath=/Customers/Customer}">
        <ListView.View>
            <!--ColumnHeaderContainerStyle="{StaticResource myHeaderStyle}"-->
            <GridView >
                <GridViewColumn Width="80" TextBlock.TextAlignment="Center">
                    <GridViewColumn.CellTemplate>
                    <DataTemplate>
                        <TextBlock HorizontalAlignment="Center" Text="{Binding XPath=Code}"></TextBlock>
                    </DataTemplate>
                  </GridViewColumn.CellTemplate>
                </GridViewColumn>
                <GridViewColumn TextBlock.TextAlignment="Center" Width="80" DisplayMemberBinding="{Binding XPath=Name}"/>
                <GridViewColumn Width="120" TextBlock.TextAlignment="center" DisplayMemberBinding="{Binding XPath=Country}"/>
                <GridViewColumn Width="120" TextBlock.TextAlignment="center" DisplayMemberBinding="{Binding XPath=money}"/>
            </GridView>
        </ListView.View>
    </ListView>


</Window>

XML

     <Customers>
  <Customer>
 <Code>1234</Code>
 <Name>EPI</Name>
 <Country>Sesame Street</Country>
<money> 98.00</money>
  </Customer>
  <Customer>
 <Code>3234</Code>
 <Name>Paul</Name>
 <Country>United Kingdom</Country>
<money> 8.70</money>
  </Customer>
 <Customer>
 <Code>3344</Code>
 <Name>Juan</Name>
 <Country>Spain</Country>
<money> 785.5</money>
  </Customer>
 <Customer>
 <Code>4321</Code>
 <Name>Dodo</Name>
 <Country>Venezuela</Country>
<money> 150.02</money>
  </Customer>
</Customers>

对不起,我无法理解。还有其他人可以帮忙吗? - Ray
我能解释得更好吗?谢谢你的帮助。 - Ozplc
为什么这个问题是社区维基? - Ryan Versaw
2个回答

19

以下是我如何做类似的事情(格式化和对齐货币列):

<GridViewColumn Header="Amount">
    <GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock TextAlignment="Right"
                       Text="{Binding Path=Amount, StringFormat='{}{0:C}'}" />
        </DataTemplate>
    </GridViewColumn.CellTemplate>
</GridViewColumn>

我也添加了这个样式:

<Style TargetType="ListViewItem">
    <Setter Property="HorizontalContentAlignment" Value="Stretch"/>
</Style>

如果您没有使用.NET 3.5 SP1,您需要使用转换器而不是StringFormat。


你必须为每一列都这样做吗? - Stylzs05
@Stylzs05 - 是的。WPF 赢了 :( - JumpingJezza

2

如果需要对货币进行字符串格式化,可以使用在 .net3.5 sp1 中引入的 "StringFormat" 在绑定对象上进行操作。

Text="{Binding XPath=Code, StringFormat=0.000}"

此外,我必须说我也不太理解你的问题。

非常感谢您的回答,但我无法使它正常工作。 - Ozplc
嗯,确实如此。这里也不起作用。看起来你正在读取的XML已经是一个字符串了,而格式函数在那里不起作用。另一种可能性:值转换器:http://www.kirupa.com/blend_wpf/value_converters_pg1.htm - Tom Deleu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接