2

我如何知道 DataGridCell 当前是否处于编辑模式(不是 IsSelected),我的意思是,例如单击 DataGridTextColumn 单元格时,它会变成 TextBox 而不是 TextBlock,这就是我所说的 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 类中有本地值分配(样式设置器具有更高的优先级)。

所以,答案是:它应该从触发器工作,但它不会从样式设置器工作。

更新: Shimmy,它确实有效。窥探您的应用程序,确保 DataGridCell 使用您的隐式样式。在树中选择 DataGridCell,并检查其背景属性。每次进入编辑模式时,它都会更新。但是默认情况下您看不到它,因为 TextBox 不继承 Background 属性。但那是另一回事了。我认为您可以调整 CellEditingTemplate 以使其正常工作。

于 2009-12-28T12:28:14.637 回答
0

打开编辑模式的正确方法是找到DataGridCell的父级DataGrid并调用BeginEdit()它。如果你直接设置它,你会回避很多DataGrid保持正确状态转换的粘性。

于 2011-02-09T17:50:49.707 回答