0

这似乎微不足道,但由于用户已提出要求:

我有一个自定义 wpf gridview 控件,其中填充了来自服务的数据。目前,我尝试更改的列显示一个欧元符号、一个空格,然后是金额。但是,这看起来像这样:

  € 0,15  
€ 145,35
 € 65,00
  € 9,50

我想做的是让它看起来像这样:

€   0,15
€ 145,35
€  65,00
€   9,50

我尝试添加自定义数量的空格,但由于我使用的字体不是 Times,所以空格的宽度与数字的宽度不同。几个小时以来,我一直试图找到这个小问题的答案,但我一直没能找到。该列可排序但不可编辑。

我一直在考虑用特定数量的€符号放置一列,在左侧放置一个€符号,在左侧添加一个仅包含符号的额外列(但我没有足够的空间来做到这一点,因为我有 3 列,其中包含金额)或者可能是相关列中的一列......有人可以帮助我吗?

我的代码:

<DataGridTextColumn Header="Amount" SortMemberPath="TotalAmount" Binding="{Binding DisplayTotalAmount, Mode=OneWay}"
4

1 回答 1

0

您可以使用 aDataGridTemplateColumn而不是DataGridTextColumn,然后设计一个模板,以按照您的意愿进行布局。

我给出的例子只是为了给你一些入门的想法。

您可能需要根据您希望对齐的完美程度进行调整,例如,如果您希望“,”完美对齐,那么您必须将您的货币价值分成欧元和美分部分,以便您可以放置将该数据放入模板中的不同元素中。

您可以在绑定上使用转换器来接受 DisplayTotalAmount,它会返回仅欧元部分或仅美分部分(您也可以通过其他方式执行此操作)。

我使用颜色来更清楚地显示不同的部分。

我已经指定了固定值(123,99)...替换为绑定...您可能使用的一些示例绑定:

  • {Binding DisplayTotalAmount, Mode=OneWay}
  • {Binding DisplayTotalAmount, Mode=OneWay, Converter={StaticResource extracteurosconv}}
  • {Binding DisplayTotalAmount, Mode=OneWay, Converter={StaticResource extractcentsconv}} 等等

如果您想要一个可编辑的版本,那么您还可以定义 aCellEditingTemplate并使用 aTextBox而不是 a TextBlock

我给你几个例子来向你展示不同的布局方式......你可以调整它们,例如添加填充、不同的宽度等。

示例 1:

<DataGridTemplateColumn Header="ColumnHeader">
<DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
    <DockPanel LastChildFill="False" Width="70" Background="Green">
      <TextBlock DockPanel.Dock="Left" Text="€"/>
      <TextBlock DockPanel.Dock="Right" Text="123,99" Background="Red"/>
    </DockPanel>
  </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

示例 2:

<DataGridTemplateColumn Header="ColumnHeader">
<DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
     <DockPanel LastChildFill="False" Width="70" Background="Green">
           <TextBlock DockPanel.Dock="Left" Text="€"/>
           <StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
               <TextBlock>,</TextBlock>
               <TextBlock Width="20" Background="Red" Text="99"/>
           </StackPanel>
           <TextBlock DockPanel.Dock="Right" Background="Blue" Text="123"/>
  </DockPanel>
  </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

示例 3:

<DataGridTemplateColumn Header="ColumnHeader">
<DataGridTemplateColumn.CellTemplate>
  <DataTemplate>
      <Grid>
      <Grid.ColumnDefinitions>
      <ColumnDefinition Width="Auto"/>
      <ColumnDefinition Width="50"/>
      <ColumnDefinition Width="Auto"/>
      <ColumnDefinition Width="20"/>
      </Grid.ColumnDefinitions>
      <TextBlock Text="€"/>
      <TextBlock Grid.Column="1" HorizontalAlignment="Right" Text="123"/>
      <TextBlock Grid.Column="2" Text=","/>
      <TextBlock Grid.Column="3" Text="99"/>
    </Grid>
  </DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

您可以使用这部分 XAML 在 KAXAML 中进行一些布局:

<Page
  xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
  <StackPanel>
<DockPanel LastChildFill="False" Width="70" Background="Green">
           <TextBlock DockPanel.Dock="Left" Text="€"/>
           <TextBlock DockPanel.Dock="Right" Text="123,99" Background="Red"/>
</DockPanel>
<DockPanel LastChildFill="False" Width="70" Background="Green">
           <TextBlock DockPanel.Dock="Left" Text="€"/>
           <StackPanel DockPanel.Dock="Right" Orientation="Horizontal">
               <TextBlock>,</TextBlock>
               <TextBlock Width="20" Background="Red" Text="99"/>
           </StackPanel>
           <TextBlock DockPanel.Dock="Right" Background="Blue" Text="123"/>
</DockPanel>
<Grid Background="Green">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="50"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<TextBlock Text="€"/>
<TextBlock Grid.Column="1" HorizontalAlignment="Right" Text="123" Background="Blue"/>
<TextBlock Grid.Column="2" Text=","/>
<TextBlock Grid.Column="3" Text="99" Background="Red"/>
</Grid>
  </StackPanel>
</Page>
于 2012-08-23T10:59:18.150 回答