2016-04-18 16 views
0

私はWPF DataGridを使用しています。私はDataGridTextColumnsの内容を表示されたテキストを垂直に中央に配置しようとしています。WPF DataGridテキストの垂直方向の整列

現在のところ、セルの値は次のようになります。http://imgur.com/nkbE7Wtあなたが見ることができるように、それらはセルの上に向かって垂直に整列しています。

私のDataGridCellsのスタイルにテンプレートを追加しようとしましたが、これはうまくいきます。つまり、http://imgur.com/TCo6RCaのようにテキストが中央に配置されています。 DataGridCellsのスタイルは次のとおりです。

<Style x:Key="DataGridCellStyle" TargetType="{x:Type DataGridCell}"> 
    <Style.Triggers> 
     <Trigger Property="IsSelected" Value="True"> 
      <Setter Property="Background" Value="{StaticResource SelectedBrush}" /> 
      <Setter Property="TextElement.Foreground" Value="#111111" /> 
     </Trigger>   
    </Style.Triggers> 
    <Setter Property="Background" Value="Transparent" /> 
    <Setter Property="TextElement.Foreground" Value="#666666" /> 
    <Setter Property="BorderBrush" Value="Transparent" /> 
    <Setter Property="BorderThickness" Value="1" /> 

    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Border Background="Transparent" 
         BorderBrush="{TemplateBinding BorderBrush}" 
         BorderThickness="0" 
         SnapsToDevicePixels="True" 
         Padding="5" 
         VerticalAlignment="Center"> 
        <ContentPresenter SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" /> 
       </Border> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

このテンプレートは、基本的に正確にどのように表示する必要があるかを示します。しかし問題があります。ユーザーが行を強調表示するために任意のセルをクリックすると、スタイルで設定された枠内をクリックして、実際に行を強調表示するDataGridを取得する必要があります。

Snoopを使用すると、問題を引き起こす境界であることがわかります。これは、http://imgur.com/9pD0W5Cがスヌープが境界線として表示するものです。マウスをクリックするとオンまたは赤く強調表示されない限り、行は選択/強調表示されません。

テンプレートを変更して、セルの一部がクリックされているだけでなく、境界内で強調表示されるようにする方法はありますか?

代わりに、セル内のテキストを垂直方向に中央に配置できる簡単な方法がありますか?

私はすでに自分のスタイルでTextElement.VerticalAlignmentを設定しようとしましたが、これは奇妙に見えるデータグリッド内に余分な行が存在する原因になります。それが中央に配置されているため、テンプレート内の

+1

(スタイル付き)スタイルでアライメントを形作るためにさらに良いですボーダーのための "ストレッチ"? – ASh

+0

それはそれをしました!本当にありがとう。それを回答として再送信したい場合は、回答としてマークすることができます – KSF

答えて

2

ボーダーは、あなただけのContentPresenterと境界のVerticalAlignment="Stretch"HorizontalAlignment="Stretch"ためVerticalAlignment="Center"を設定した場合、それが動作するはずです(VerticalAlignment="Center"

利用可能DataGridCellスペースを埋めていません。

あなたがのContentPresenterと `VerticalAlignmentを= "ストレッチ"`用と `たHorizo​​ntalAlignment =` `設定VerticalAlignmentを= "センター" ならば、それは助けない

<Setter Property="VerticalContentAlignment" Value="Center" /> 
<Setter Property="Template"> 
    <Setter.Value> 
     <ControlTemplate TargetType="{x:Type DataGridCell}"> 
      <Border ...> 
       <ContentPresenter VerticalAlignment="{TemplateBinding VerticalContentAlignment}" ... /> 
      </Border> 
     </ControlTemplate> 
    </Setter.Value> 
</Setter> 
関連する問題