DataGrid 的 CellEditingTemplate 和焦点在编辑模式
Posted
技术标签:
【中文标题】DataGrid 的 CellEditingTemplate 和焦点在编辑模式【英文标题】:DataGrid's CellEditingTemplate and focus in edit mode 【发布时间】:2011-04-27 11:38:49 【问题描述】:当自定义列同时提供 CellTemplate
和 CellEditingTemplate
时,我遇到了 WPFToolkit DataGrid
的问题。如果你看看下面,你会看到我的编辑模板有一个CheckBox
。从功能上来说一切都很好,但是当按下 F2 来编辑单元格时,还必须按下 TAB 才能让CheckBox
获得焦点。理想情况下,可以按 F2 和 SPACE 来切换值。目前,必须按 F2、TAB、SPACE。我尝试设置TabIndex
无济于事。我的想法不多了。
<WPFToolkit:DataGridTemplateColumn Header="Turn"
MinWidth="60">
<WPFToolkit:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<Image Height="16">
<Image.Style>
<Style TargetType="x:Type Image">
<Style.Triggers>
<DataTrigger Binding="Binding CanTurn" Value="True">
<Setter Property="Source" Value="/Images/16/Tick.png" />
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</DataTemplate>
</WPFToolkit:DataGridTemplateColumn.CellTemplate>
<WPFToolkit:DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<CheckBox IsChecked="Binding Path=CanTurn" HorizontalAlignment="Center" HorizontalContentAlignment="Center" />
</DataTemplate>
</WPFToolkit:DataGridTemplateColumn.CellEditingTemplate>
</WPFToolkit:DataGridTemplateColumn>
【问题讨论】:
【参考方案1】:试试这个
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<CheckBox Name="checkbox" IsChecked="Binding Path=CanTurn" HorizontalAlignment="Center" HorizontalContentAlignment="Center" />
<DataTemplate.Triggers>
<Trigger SourceName="checkbox" Property="IsVisible" Value="True">
<Setter TargetName="checkbox" Property="FocusManager.FocusedElement" Value="Binding ElementName=checkbox" />
</Trigger>
</DataTemplate.Triggers>
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
【讨论】:
干得好。虽然它最初不起作用,因为我正在使用 DataGrid 上的 SelectedItem 属性。删除它并更改 SelectionUnit="Cell" 并且这有效。【参考方案2】:或者这个……
<DataGridTemplateColumn Header="Long" IsReadOnly="False" Width="100">
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<CheckBox FocusManager.FocusedElement="Binding RelativeSource=RelativeSource Self" IsChecked="Binding Path=CanTurn" HorizontalAlignment="Center" HorizontalContentAlignment="Center" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
【讨论】:
你也可以将它移动到一个样式中。 干得好。虽然它最初不起作用,因为我正在使用 DataGrid 上的 SelectedItem 属性。删除它并更改 SelectionUnit="Cell" 并且这有效。 这条线实际上做了什么"Binding RelativeSource=RelativeSource Self"
?【参考方案3】:
如果您想将焦点设置在编辑上并选择 Binding 给出的文本,试试这个。
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="Binding Parameter0, Mode=TwoWay" Loaded="TbLoaded" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
后面的代码:
private void TbLoaded(object sender, EventArgs e)
TextBox tb = sender as TextBox;
if (tb == null) return;
tb.SelectAll();
FocusManager.SetFocusedElement(this, tb);
【讨论】:
谢谢,这很有帮助!以上是关于DataGrid 的 CellEditingTemplate 和焦点在编辑模式的主要内容,如果未能解决你的问题,请参考以下文章