0

これは些細なことのようですが、ユーザーが要求したので:

サービスからのデータで満たされたカスタムwpfグリッドビューコントロールがあります。現在、変更しようとしている列には、ユーロ記号、スペース、金額が表示されています。ただし、これは次のようになります。

  € 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

DataGridTemplateColumnの代わりにを使用して、DataGridTextColumn希望どおりにレイアウトするテンプレートを設計することもできます。

私が提供する例は、始めるためのいくつかのアイデアを提供するためのものです。

配置をどの程度完璧にするかに応じて調整する必要がある場合があります。たとえば、「、」を完全に配置する場合は、通貨の値をユーロとセントの部分に分割して、配置できるようにする必要があります。そのデータをテンプレートのさまざまな要素に入れます。

バインディングでコンバーターを使用してDisplayTotalAmountを受け入れると、ユーロのみの部分、またはセントのみの部分が返されます(これを行う方法は他にもあります)。

さまざまな部分をより明確に示すために、色を使用しました。

固定値(123,99)を指定した場合...バインディングに置き換えます...使用する可能性のあるバインディングの例:

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

編集可能なバージョンが必要な場合は、を定義し、の代わりにをCellEditingTemplate使用します。TextBoxTextBlock

レイアウトを行うさまざまな方法を示すために、いくつかの例を示します。たとえば、パディングの追加、さまざまな幅など、それらを調整できます。

例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 に答える