2016-07-04 48 views
0

因此,我得到了下一个问题: 我正在设置一个自定义的表格(从数据库中获取),其中单元格的内容将被包裹。 我可以正确设置视图。该代码是:为所有单元格设置TextWrapping以使用模板

<Grid Style="{StaticResource FormBackground}"> 
    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="20" /> 
     <ColumnDefinition Width="*" /> 
     <ColumnDefinition Width="20" /> 
    </Grid.ColumnDefinitions> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="15" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="40" /> 
     <RowDefinition Height="10" /> 
    </Grid.RowDefinitions> 

    <Grid Grid.Column="1" Grid.Row="1"> 
     <Border Style="{StaticResource DGBorder}"> 
      <DataGrid x:Name="usuariosGrid" 
        AutoGenerateColumns="False" 
        CanUserAddRows="False" 
        Grid.Row="0" 
        Style="{StaticResource Table}" > 
       <DataGrid.Columns> 
        <DataGridTextColumn Header="ID" Width="40" Binding="{Binding Id}" IsReadOnly="True"> 
         <DataGridTextColumn.ElementStyle> 
          <Style TargetType="TextBlock"> 
           <Setter Property="TextWrapping" Value="Wrap" /> 
          </Style> 
         </DataGridTextColumn.ElementStyle> 
        </DataGridTextColumn> 
        <DataGridTextColumn Header="Nombre" Width="*" Binding="{Binding Nombre}" IsReadOnly="True"> 
         <DataGridTextColumn.ElementStyle> 
          <Style TargetType="TextBlock"> 
           <Setter Property="TextWrapping" Value="Wrap" /> 
          </Style> 
         </DataGridTextColumn.ElementStyle> 
        </DataGridTextColumn> 
        <DataGridTextColumn Header="Apellido Paterno" Width="*" Binding="{Binding ApellidoPaterno}" IsReadOnly="True"> 
         <DataGridTextColumn.ElementStyle> 
          <Style TargetType="TextBlock"> 
           <Setter Property="TextWrapping" Value="Wrap" /> 
          </Style> 
         </DataGridTextColumn.ElementStyle> 
        </DataGridTextColumn> 
        <DataGridTextColumn Header="Apellido Materno" Width="*" Binding="{Binding ApellidoMaterno}" IsReadOnly="True"> 
         <DataGridTextColumn.ElementStyle> 
          <Style TargetType="TextBlock"> 
           <Setter Property="TextWrapping" Value="Wrap" /> 
          </Style> 
         </DataGridTextColumn.ElementStyle> 
        </DataGridTextColumn> 
        <DataGridTextColumn Header="CorreoElectronico" Width="*" Binding="{Binding CorreoElectronico}" IsReadOnly="True"> 
         <DataGridTextColumn.ElementStyle> 
          <Style TargetType="TextBlock"> 
           <Setter Property="TextWrapping" Value="Wrap" /> 
          </Style> 
         </DataGridTextColumn.ElementStyle> 
        </DataGridTextColumn> 
       </DataGrid.Columns> 
      </DataGrid> 
     </Border> 
    </Grid> 

做工不错,但是是非常丑陋的,因为我必须设置文本框 - > TextWrapping - >自定义包裹每列。另外 - 该项目包含多个DataGrid。所以,可以肯定的 - 我想这一切打包到一个资源字典,那就是:

<Style x:Key="Table" TargetType="DataGrid"> 
    <Setter Property="Foreground" Value="{StaticResource WhiteBrush}" /> 
    <Setter Property="RowBackground" Value="Transparent"/> 
    <Setter Property="AlternatingRowBackground" Value="{StaticResource DarkBlueFadedBrush}" /> 
    <Setter Property="Background" Value="Transparent"/> 
    <Setter Property="BorderThickness" Value="0"/> 
    <Setter Property="ColumnHeaderStyle" Value="{StaticResource DGColumnHeader}" /> 
    <Setter Property="RowStyle" Value="{StaticResource SelectedRow}"/> 
    <Setter Property="GridLinesVisibility" Value="None" /> 
    <Setter Property="RowHeaderWidth" Value="0" /> 
    <Setter Property="BorderBrush" Value="{StaticResource LightBlueBrush}" /> 
</Style> 

而在这一点有趣的开始:不支持将其设置为风格DataGridTextColumn。

好吧 - 哪里是遗嘱,哪里有办法。网络上的一位同志说,并提出了使用后面代码的建议。这是公平的。但是我有一个信念,那就是这种类型的改进应该被分开(并且因为有必要将代码添加到每个包含表单的观众)。

任何意见,工作指示等,将不胜感激。

回答

0
  1. 如果你想在所有DataGrids之间保持共同点。从DataGrid衍生出一个新类,从而创建新的Control

  2. 你可以随时做到这一点:<DataGridTextColumn ElementStyle="{StaticResource tbKey}" Binding="{Binding Name}"/>

    <Style TargetType="TextBlock" x:Key="tbKey"> 
         <Setter Property="TextWrapping" Value="Wrap" /> 
        </Style> 
    
+0

看起来像我一直在急于或有点。当我再看一眼时 - 我的解决方案似乎完全等于您的建议。所以 - 标记你的一个是正确的。谢谢。 –

1

这是为我工作,在这种特殊情况。 风格:

<Style TargetType="{x:Type TextBlock}" x:Key="WrapText"> 
    <Setter Property="TextWrapping" Value="Wrap"/> 
</Style> 

用法:

<DataGrid.Columns> 
    <DataGridTextColumn Header="ID" Width="40" Binding="{Binding Id}" IsReadOnly="True" ElementStyle="{StaticResource WrapText}" /> 

所以,整个诀窍是如何定义的风格与ElementStyle属性,描述DataGridTextColumn时。
希望它会有帮助。

相关问题