2017-06-16 11 views
0

WPFプロジェクトでは、自分のプログラムのすべてのWindowsに対して暗黙的なスタイルを実行したいと思っています。 DataGridのDataGridTextColumnに問題があります。これはビューモードのTextBlockとEditModeのTextBoxですが、スタイルは適用されません。DataGrid(WPF、C#)内でのTextBoxの適切な暗黙的なスタイル設定方法

私の暗黙のスタイリングは

<System:Double x:Key="FontSize">14</System:Double> 

<Style x:Key="TextBoxStyle" TargetType="TextBox"> 
    <Setter Property="Margin" Value="3" /> 
    <Setter Property="MinWidth" Value="30" /> 
    <Setter Property="Height" Value="20" /> 
    <Setter Property="VerticalContentAlignment" Value="Center" /> 
    <Setter Property="VerticalAlignment" Value="Center" /> 
    <Setter Property="Background" Value="White" /> 
    <Setter Property="FontSize" Value="{StaticResource FontSize}" /> 
    <Style.Triggers> 
     <Trigger Property="IsReadOnly" Value="True"> 
      <Setter Property="Background" Value="LightGray" /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

<Style TargetType="TextBox" BasedOn="{StaticResource TextBoxStyle}" /> 

このスタイリングは、編集モードでDataGridTextColumnには適用されません。

は私が最終的な結果は、のFontSizeが現在適用されていることである。この StackOverflow Question

<Style TargetType="DataGridCell"> 
    <Setter Property="TextElement.FontSize" Value="{StaticResource FontSize}" /> 
</Style> 

でいくつかの助けを見つけたが、私はその後、垂直CenterAlignへの解決策を見つけた enter image description here

コンテンツが垂直トップ揃えられますDataGridTextColumnの内容

<Style TargetType="DataGridCell"> 
    <Setter Property="TextElement.FontSize" Value="{StaticResource FontSize}" /> 
    <Setter Property="Template"> 
     <Setter.Value> 
      <ControlTemplate TargetType="{x:Type DataGridCell}"> 
       <Grid Background="{TemplateBinding Background}"> 
         <ContentPresenter VerticalAlignment="Center" /> 
       </Grid> 
      </ControlTemplate> 
     </Setter.Value> 
    </Setter> 
</Style> 

enter image description here

は残念ながら、私は今、私が試してみて、テキストボックスの周りに境界線を削除するために、様々な解決策を試してみました

enter image description here

私のエディットモードで国境に直面したが、私はできませんでした。 暗黙的なTextBoxスタイルをDataGridTextColumnのEditmodeにも適用するように指定することはできますか?

私はWPF Stylingが限定的であり、理解しづらいことが判明しています。私はあなたが例えば、あなたのTextBoxStyleにすべての列のEditingElementStyleを設定することができる誰かがいくつかの明快さに

答えて

1

を提供することを願って:

<DataGrid ...> 
    <DataGrid.Resources> 
     <System:Double x:Key="FontSize">14</System:Double> 
     <Style x:Key="TextBoxStyle" TargetType="TextBox"> 
      <Setter Property="Margin" Value="3" /> 
      <Setter Property="MinWidth" Value="30" /> 
      <Setter Property="Height" Value="20" /> 
      <Setter Property="VerticalContentAlignment" Value="Center" /> 
      <Setter Property="VerticalAlignment" Value="Center" /> 
      <Setter Property="Background" Value="White" /> 
      <Setter Property="FontSize" Value="{StaticResource FontSize}" /> 
      <Style.Triggers> 
       <Trigger Property="IsReadOnly" Value="True"> 
        <Setter Property="Background" Value="LightGray" /> 
       </Trigger> 
      </Style.Triggers> 
     </Style> 
    </DataGrid.Resources> 
    <DataGrid.Columns> 
     <DataGridTextColumn Binding="{Binding Property1}" EditingElementStyle="{StaticResource TextBoxStyle}" /> 
     <DataGridTextColumn Binding="{Binding Property2}" EditingElementStyle="{StaticResource TextBoxStyle}" /> 
    </DataGrid.Columns> 
</DataGrid> 

これらTextBoxesには、暗黙的なスタイリングはありませんので、あなたはそれぞれのEditingElementStyleプロパティを設定する必要があります個々の列私は怖いです。

+0

私は実際にそれらを暗黙的にスタイルする方法を見つけることを望んでいました。他に誰も解決策がない場合、これが解決策になります。 – JesperGJensen

+0

カスタムのDataGridTextColumnクラスを作成して、EditingElementStyleをカスタムスタイルに設定することができます。 – mm8

+0

あなたのソリューションは明らかに機能し、あなたのご意見をお寄せいただきありがとうございます。私はそれを答えと記しました。 WPFが完全暗黙の設定をサポートしていないこと – JesperGJensen

関連する問題