2009-05-12 27 views
9

私は、多くの行と列を持つWPFグリッドを持っています。それらはすべてTextBlocksやTextBoxesのようなものを含んでいます。WPF Grid - スタイルを1列だけに適用する方法は?

この特定の状況では、列1のすべての要素にパディングがあり、列2のすべての要素が右揃えになります。グリッド内の各アイテムにこれらのプロパティを設定する必要があるのは、非常に非WPFのようです。

<Grid> 
    <Grid.Resources> 
    <Style TargetType="{x:Type TextBox}"> 
     <Setter Property="HorizontalAlignment" Value="Right"/> 
    </Style> 
    </Grid.Resources> 
</Grid> 

しかし、言うだけのコントロールに列2をそのスタイルを適用する方法があります:

は、私はこのような何かを行うことによって、グリッド内のすべてのテキストブロックのスタイルを作成することができます知っていますか?

別のコントロールを使用すべきですか?

+0

それは、ネイティブのグリッドコントロールとはできません。..おそらくあなたはカスタム添付プロパティを使ってそのようなことをすることができます –

答えて

17

は、ここで私は通常、何をすべきかです:

<Style TargetType="{x:Type TextBlock}" BasedOn="{StaticResource {x:Type TextBlock}}"> 
    <Style.Triggers> 
     <Trigger Property="Grid.Column" Value="0"> 
      <Setter Property="Margin" Value="0,0,2,0" /> 
     </Trigger> 

     <Trigger Property="Grid.Column" Value="2"> 
      <Setter Property="Margin" Value="20,0,2,0" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

これはまさに私が探していたものです!ニースとエレガントすぎる、なぜ私はそれを考えなかった:) –

0

あなたは、以下のようないくつかのスタイルを定義し、あなたのColumn.ElementStyleプロパティに割り当てることができます。

<Window.Resources> 
     <Style x:Key="elementStyle" TargetType="TextBlock"> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
      <Setter Property="Margin" Value="2,0,2,0" /> 
     </Style> 

     <Style x:Key="rightElementStyle" BasedOn="{StaticResource elementStyle}" TargetType="TextBlock"> 
      <Setter Property="HorizontalAlignment" Value="Right" /> 
     </Style> 

     <Style x:Key="centerElementStyle" BasedOn="{StaticResource elementStyle}" TargetType="TextBlock"> 
      <Setter Property="HorizontalAlignment" Value="Center" /> 
     </Style> 
</Window.Resources> 

<dg:DataGrid AutoGenerateColumns="False"> 
     <dg:DataGrid.Columns> 
      <dg:DataGridTextColumn Binding={Binding Path=Name} 
            Header="Name" 
            ElementStyle="{StaticResource centerElementStyle}"/> 
      <dg:DataGridTextColumn Binding={Binding Path=Amount} 
            Header="Amount" 
            ElementStyle="{StaticResource rightElementStyle}"/> 
    </dg:DataGrid.Columns> 
</dg:DataGrid> 
+0

これはDataGrid専用ですか?これをグリッドに適用する方法はわかりません。 –

+0

各列にスタイルを割り当てることができます。編集したコードを参照してください。 – sacha

+0

標準グリッドでこれを行う方法を探していましたが、DataGridを見て、代わりにこのグリッドを使用できるかどうかを確認します。 –

関連する問題