2

datagridcell を常に編集モードにしておく必要があります。データグリッド セルを編集モードにするオプションが見つからないため、コントロール テンプレートを使用してデータグリッド セルの下に TextBox を配置しました。

テキスト ボックスに書き込むことはできますが、データグリッド セルの内容が更新されません。textbox に書いたものでデータグリッドセルのコンテンツを更新するにはどうすればよいですか? ここにスタイルがあります:

    <Style TargetType="{x:Type DataGridCell}" x:Key="DatagridCellWithTextbox">
            <Setter Property="BorderThickness" Value="2"></Setter>
            <Setter Property="Foreground" Value="{DynamicResource ContentNormalBrush}"/>
            <Setter Property="Margin" Value="0"></Setter>
            <Setter Property="VerticalContentAlignment" Value="Center"></Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type DataGridCell}">
                        <Grid Background="{TemplateBinding Background}">
                          <Border BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" SnapsToDevicePixels="True">
                            <TextBox x:Name="txtCell" Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Content.Text}" VerticalContentAlignment="Top" Focusable="True" />
                          </Border>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
          </Style>

ありがとうディー

4

3 に答える 3

3

DataGridCell.IsEditing Propertyを試しましたか?

<Style TargetType="{x:Type DataGridCell}">
    <Setter Property="IsEditing" Value="True" />
</Style>

編集:

DataGrid.CellEditEnding EventCancelプロパティを編集モードに設定しておくことができます。True

<DataGrid CellEditEnding="DataGrid_CellEditEnding"

.

private void DataGrid_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
{
    e.Cancel = true;
}
于 2012-05-17T22:13:48.350 に答える
2

この質問が古いことは知っていますが、最近、これに対する独自のソリューションを開発しました。

メソッドを継承しDataGridTextColumnてオーバーライドするだけです。GenerateElement

public class EditingTextBoxColumn : DataGridTextColumn
{
    protected override FrameworkElement GenerateElement(DataGridCell cell, object dataItem)
    {
        var textbox = base.GenerateEditingElement(cell, dataItem) as TextBox;
        textbox.IsReadOnly = IsReadOnly;
        return textbox;
    }
}

これは、他のタイプの列でも機能します。もちろん、これはDataGridColumn既に存在する型 (DataGridTextColumnなど) に対してのみ機能しますDataGridComboBoxColumn

于 2016-11-18T08:50:00.113 に答える
0

これが古いことは知っていますが、もっと良い答えがあると思います。読み取り専用の DataGridTemplateColumn を使用して、CellTemplate を設定します。CellTemplate ではバインドが正しく機能しませんが、別の RelativeSource を使用して修正できます。

<DataGridTemplateColumn Width="Auto" Header="Select" IsReadOnly="True">
  <DataGridTemplateColumn.CellTemplate>
    <DataTemplate DataType="models:DealAcctListItem">
      <CheckBox IsChecked="{Binding RelativeSource=
                           {RelativeSource AncestorType=DataGridCell}, 
                           Path=DataContext.IsSelected}" />
    </DataTemplate>
  </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

これは、DataGrid の編集モードを正しく機能させるよりもはるかに簡単です。

于 2020-07-08T08:41:39.580 に答える