1

我在设置用于在 DataGridTextColumn 中进行编辑的 TextBox 的样式时遇到问题。本专栏的一些背景知识:

  • 它绑定到一个名为“Top”的属性(数值)
  • 有一个名为“ShowAll”的属性用作禁用列的触发器
  • 如果启用了该列,我希望 TextBox 的外观与 TextBlock 的外观和感觉相匹配(右对齐,垂直居中)。

该单元格在非编辑模式下看起来很完美。

(抱歉没有图片,但是 Stackoverflow 需要 10 个声望点才能发布图片,这具有讽刺意味的是,这会导致一个人的早期帖子效果不佳;愚蠢的规则)

如果我省略了 DataGridTextColumn.EditingElementStyle 部分(即,如果我使用默认编辑样式),当单元格接收焦点时,TextBox 在 DataGridTextColumn 内左上对齐:

默认编辑模式

我希望正在编辑的值保持右对齐和垂直居中。但是,当我为 EditingElementStyle 添加与 ElementStyle 相同的两种样式时,会出现蓝色背景,并且文本框不会填充单元格:

在此处输入链接描述

我尝试了其他设置器,例如 Horizo​​ntalContentAlignment(Stretch 的值),但没有运气。这是我的代码:

<DataGridTextColumn Header="Top" Binding="{Binding Path=Top}" Width="70">
	<DataGridTextColumn.ElementStyle>
		<Style TargetType="{x:Type TextBlock}">
			<Setter Property="HorizontalAlignment" Value="Right" />
			<Setter Property="VerticalAlignment" Value="Center" />
		</Style>
	</DataGridTextColumn.ElementStyle>
	<DataGridTextColumn.EditingElementStyle>
		<Style TargetType="{x:Type TextBox}">
			<Setter Property="HorizontalAlignment" Value="Right" />
			<Setter Property="VerticalAlignment" Value="Center" />
		</Style>
	</DataGridTextColumn.EditingElementStyle>
	<DataGridColumn.CellStyle>
		<Style TargetType="DataGridCell">
			<Style.Triggers>
				<DataTrigger Binding="{Binding ShowAll}" Value="False">
					<Setter Property="Foreground" Value="Transparent"/>
					<Setter Property="Background" Value="LightGray"/>
					<Setter Property="IsEnabled" Value="False"/>
				</DataTrigger>
			</Style.Triggers>
		</Style>
	</DataGridColumn.CellStyle>
</DataGridTextColumn>

4

2 回答 2

1

有关 Ben 建议的解决方案的更多信息:

                <DataGridTextColumn.EditingElementStyle>
                    <Style TargetType="{x:Type TextBox}">
                        <Setter Property="VerticalContentAlignment" Value="Center" />
                        <Setter Property="HorizontalContentAlignment" Value="Right" />
                        <Setter Property="VerticalAlignment" Value="Center" />
                        <Setter Property="Height" Value="22" />
                    </Style>
                </DataGridTextColumn.EditingElementStyle>
于 2015-04-30T15:25:52.500 回答
1

蓝色可能是 SystemColors 中的高亮键刷之一(请参阅SystemColors 列表

为了填充单元格的宽度,您可以尝试将文本框的宽度绑定到单元格,如下所示:

 <Setter Property="Width" Value="{Binding ActualWidth, RelativeSource={RelativeSource Mode=FindAncestor, 
                         AncestorType={x:Type DataGridTextColumn}}}"/> 

编辑:有趣的是,在测试你的 xaml 时,将 Horizo​​ntalAlignment 更改为 Horizo​​ntalContentAlignment 对我有用:)

<DataGridTextColumn.EditingElementStyle>
                    <Style TargetType="{x:Type TextBox}">
                        <Setter Property="HorizontalContentAlignment" Value="Right" />
                        <Setter Property="VerticalAlignment" Value="Center" />...

EDIT2 ;):事实上,您可以覆盖 SystemColor Defaults,将其添加到您的 xaml 以更改突出显示效果:

<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />

并在必要时另外更改控制键

<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" />

请注意,文本画笔的行为可能不同,您可能无法覆盖它们。有关该问题的更多详细信息,此链接可能很有用。

于 2015-04-30T11:46:52.867 回答