2017-06-16 19 views
0

我有一个WPF项目,我想为我的程序的所有Windows执行隐式样式。 我面临DataGrid中的DataGridTextColumn问题。这是查看模式下的TextBlock和EditMode中的TextBox,但是我的样式不适用于它们。如何在DataGrid中实现TextBox的正确隐式样式(WPF,C#)

我隐式造型

<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。

我发现这个StackOverflow Question

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

一些帮助,最终的结果是,字号现在被应用,但内容是垂直顶对齐 enter image description here

然后我找到了解决垂直CenterAlign在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

我尝试了各种解决方案,以尝试并删除周围的文本框边框,但我一直无法。 无论如何,我可以指定我的隐式文本框样式也应该适用于DataGridTextColumn Editmode?

我在找WPF造型是限制和难以理解的。我希望有人能提供一些清晰

回答

1

您可以设置所有列的EditingElementStyleTextBoxStyle,如:

<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