1

DataGridTextColumn での編集に使用される TextBox のスタイリングに問題があります。このコラムの背景:

  • 「Top」(数値)というプロパティにバインドされています
  • 列を無効にするトリガーとして使用される「ShowAll」というプロパティがあります
  • 列が有効になっている場合は、TextBox のルック アンド フィールを TextBlock のルック アンド フィールと一致させたい (右揃え、垂直方向の中央揃え)。

セルは非編集モードで完璧に見えます。

(写真がないことをお詫びしますが、Stackoverflow は写真を投稿する前に 10 の評判ポイントを必要とします。皮肉なことに、初期の投稿の効果が低下します。ばかげたルール)

DataGridTextColumn.EditingElementStyle セクションを省略した場合 (つまり、デフォルトの編集スタイルを使用した場合)、セルがフォーカスを受け取ると、TextBox は DataGridTextColumn 内で左上に配置されます。

デフォルトの編集モード

編集中の値が右揃えで垂直方向の中央に配置されるようにしたいと思います。しかし、ElementStyle に対して行ったのと同じ 2 つのスタイルを EditingElementStyle に追加すると、背景が青色になり、テキスト ボックスがセルを埋めません。

ここにリンクの説明を入力

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

ベンが提案したソリューションに関する詳細情報:

                <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 のハイライト キー ブラシの 1 つかもしれません (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 ;): 実際、これを xaml に追加して SystemColor Defaults を上書きし、ハイライト効果を変更できます。

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

さらに、必要に応じてコントロールキーを変更します

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

テキスト ブラシの動作が異なる場合があり、上書きできない場合があることに注意してください。この問題の詳細については、このリンクが役立つ場合があります。

于 2015-04-30T11:46:52.867 に答える