DataGridTextColumn' TextBox"样式与其#34; TextBlock"

时间:2015-04-29 19:30:49

标签: wpf textbox datagridtextcolumn

我无法设置用于在DataGridTextColumn中进行编辑的TextBox样式。本专栏的一些背景知识:

  • 它被绑定到一个名为“Top' Top' (数值)
  • 有一个名为" ShowAll"用作禁用列的触发器
  • 如果列已启用,我希望TextBox的外观与TextBlock的外观匹配(右对齐,垂直居中)。

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

(对于缺少图片感到道歉,但Stackoverflow在发布图片之前需要10个声望点,这具有讽刺意味的是,这些帖子的早期帖子效果不佳;愚蠢的规则)

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

Default edit mode

我希望编辑的值保持右对齐和垂直居中。但是当我为EditingStyle添加了与EditingElementStyle相同的两个样式时,有一个蓝色背景,文本框没有填充单元格:

enter link description here

我已尝试过其他的setter,例如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>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:1)

蓝色可能是SystemColors的高亮键刷之一 (见List of 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默认值,将其添加到您的xaml中以更改突出显示效果:

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

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

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

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

答案 1 :(得分: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>