首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何让WPF DataGrid单元格右对齐而不使新行上的可选区域变得很小?

如何让WPF DataGrid单元格右对齐而不使新行上的可选区域变得很小?
EN

Stack Overflow用户
提问于 2011-10-18 06:30:31
回答 5查看 65.4K关注 0票数 66

我使用的是WPF4.0 DataGrid。当双击新行中的一个单元格时,除非我在该列中添加了一个单元格样式,否则一切正常,除非。例如,我有一个数值列,希望将数据右对齐,因此xaml如下所示

代码语言:javascript
复制
<DataGridTextColumn Binding="{Binding Path=ImpaId}"
                    CellStyle="{StaticResource CellRightAlign}">
     <DataGridTextColumn.Header>
          <TextBlock  Style="{StaticResource DataGridHeader}">Impa</TextBlock>
     </DataGridTextColumn.Header>
</DataGridTextColumn>

其中共享资源中的样式只是:

代码语言:javascript
复制
<Style x:Key="CellRightAlign">
    <Setter Property="Control.HorizontalAlignment"
            Value="Right" />
</Style>

新行上的结果可选区域在图像中显示为小的蓝色area.This是用户要命中的一个非常小的目标,而这恰好是用户希望从新行开始的最可能的列。

如果我删除CellStyle,区域就会正常工作,但当然我会失去正确的对齐方式。

有谁知道如何实现这两个目标吗?

我试过的东西

  1. 将绑定上的TargetNullValue设置为具有一定宽度的格式。这对现有行有效,但对新行没有影响。
  2. 在列上设置MinWidth,这不会影响新行可选区域的宽度。

有效的方法:

使用@AngelWPF的答案中的信息,我能够从使用CellStyle改为使用ElementStyle,如下所示:

代码语言:javascript
复制
<DataGridTextColumn Binding="{Binding Path=ImpaId}"
                    CellStyle="{StaticResource CellRightAlign}">

变成了

代码语言:javascript
复制
<DataGridTextColumn Binding="{Binding Path=ImpaId}"
                    ElementStyle="{StaticResource CellRightAlign}">
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-10-18 15:16:02

您可以在针对TextBlockDataGridTextColumn上应用ElementStyle,并将其正确对齐,它将会工作。

代码语言:javascript
复制
      <DataGridTextColumn Binding="{Binding Path=ImpaId}">
          <DataGridTextColumn.Header>
               <TextBlock  Style="{StaticResource
                                  DataGridHeader}">
                    Impa
               </TextBlock>
          </DataGridTextColumn.Header>
          <DataGridTextColumn.ElementStyle>
              <Style TargetType="{x:Type TextBlock}">
                  <Setter Property="HorizontalAlignment" Value="Right" />
              </Style>
          </DataGridTextColumn.ElementStyle>
      </DataGridTextColumn> 
票数 92
EN

Stack Overflow用户

发布于 2016-02-24 15:21:05

只是想为将来的代码搜索添加更多的示例。

我将这段代码放在xaml文件的顶部:

代码语言:javascript
复制
<UserControl.Resources>
    <Style TargetType="{x:Type TextBlock}" x:Key="RightCell">
        <Setter Property="Background" Value="{Binding Included, Converter={StaticResource BoolToColorConverter}}"/>
        <Setter Property="HorizontalAlignment" Value="Stretch"/>
        <Setter Property="TextAlignment" Value="Right"/>
    </Style>
</UserControl.Resources>

然后在数据网格中:

代码语言:javascript
复制
<DataGridTextColumn Header="Excluded" Binding="{Binding Excluded}" ElementStyle="{StaticResource RightCell}"/>

这会右对齐文本,并且排序仍处于启用状态。文本框填充单元格,在本例中使用布尔转换器进行着色。

票数 20
EN

Stack Overflow用户

发布于 2011-10-18 06:46:48

您可以尝试一种变通方法:

代码语言:javascript
复制
           <DataGridTemplateColumn>
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Grid Background="White" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
                        <TextBlock HorizontalAlignment="Right" Text="{Binding Path=ImpaId}"/>
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7800367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档