2

DataGridCell が現在編集モード (IsSelected ではない) であるかどうかを知るにはどうすればよいですか。たとえば、DataGridTextColumn セルをクリックすると、TextBlock ではなく TextBox になります。これを IsEditMode と呼びます。このモードにトリガーセッターを設定したい。

編集: DataGridCell.IsEditing の一般的なスタイルを設定しようとしましたが、何もしないようです。

ここに私の現在のコードのスニペットがあります:

<Style TargetType="{x:Type tk:DataGridCell}">
    <Style.Triggers>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{x:Null}"/>
        </Trigger>
        <Trigger Property="IsEditing" Value="True">
            <Setter Property="BorderBrush" Value="#FF62B6CC"/>
            <Setter Property="Background" Value="#FFF4F4F4"/>
        </Trigger>
    </Style.Triggers>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="BorderThickness" Value="0"/>
    <Setter Property="BorderThickness" Value="0.5"/>
    <Setter Property="BorderBrush" Value="{x:Null}"/>
</Style>

ありがとう。

4

3 に答える 3

2

方法は次のとおりです。

<Trigger Property="IsEditing" Value="True">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="DataGridCell">
                <TextBox Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text, Mode=TwoWay, UpdateSourceTrigger=Default}" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" />
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Trigger>

次に、テキストボックスを好きなようにスタイルします

于 2011-04-06T06:46:07.373 に答える
1

DataGridCell.csファイルを見ると、IsEditing はセルが編集モードかどうかを確認する良い方法です。ただし、このプロパティをスタイルから設定することはできません。これは、DataGridCell クラス (スタイル セッターからの優先度が高い) にローカル値の割り当てがあるためです。

したがって、答えは次のようになります。トリガーからは機能するはずですが、スタイル セッターからは機能しません。

更新:シミー、それは本当にうまくいきます。アプリケーションをスヌープし、DataGridCell が暗黙的なスタイルを使用していることを確認してください。ツリーで DataGridCell を選択し、その背景プロパティを確認します。編集モードに入るたびに更新されます。ただし、TextBox は Background プロパティを継承しないため、デフォルトでは表示されません。しかし、それは別の話です。CellEditingTemplate を微調整して機能させることができると思います。

于 2009-12-28T12:28:14.637 に答える
0

編集モードをオンにする適切な方法は、DataGridCellの親を見つけてそれDataGridを呼び出すBeginEdit()ことです。DataGrid直接設定すると、適切な状態遷移を維持する多くのグーを回避しています。

于 2011-02-09T17:50:49.707 に答える