如果窗口左侧有一个WPF DataGrid
,右侧有一个区域用于显示所选记录。所选记录由Textbox
es和ComboBox
es组成,在单击编辑按钮之前,这些记录将被禁用。一切都按预期工作。
但是,当ComboBox
的{{1}}被更改时,填充SelectedItem
es似乎有点笨拙。在单击“编辑”按钮之前,可以使用更轻的控件(例如DataGrid
),然后可以为TextBlock
es切换TextBlock
。
我确信这可以通过某种模板来完成,但是当我尝试对此进行试验时,与ComboBox
es关联的所有事件都会报告错误,因为它们不再存在因为它们已在“查看模式”中替换为TextBlocks。
我可能会犯这个错误,所以一些指导意见将会受到赞赏。
答案 0 :(得分:3)
这里是优秀的article
将单击编辑应用于DataGrid中的所有单元格
将单击编辑仅应用于DataGrid中的某些单元格
将方法粘贴到
后面的代码中
//
// SINGLE CLICK EDITING
//
private void DataGridCell_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DataGridCell cell = sender as DataGridCell;
if (cell != null && !cell.IsEditing && !cell.IsReadOnly)
{
if (!cell.IsFocused)
{
cell.Focus();
}
DataGrid dataGrid = FindVisualParent<DataGrid>(cell);
if (dataGrid != null)
{
if (dataGrid.SelectionUnit != DataGridSelectionUnit.FullRow)
{
if (!cell.IsSelected)
cell.IsSelected = true;
}
else
{
DataGridRow row = FindVisualParent<DataGridRow>(cell);
if (row != null && !row.IsSelected)
{
row.IsSelected = true;
}
}
}
}
}
static T FindVisualParent<T>(UIElement element) where T : UIElement
{
UIElement parent = element;
while (parent != null)
{
T correctlyTyped = parent as T;
if (correctlyTyped != null)
{
return correctlyTyped;
}
parent = VisualTreeHelper.GetParent(parent) as UIElement;
}
return null;
}
答案 1 :(得分:1)
ContentTemplateSelector属性应允许您根据当前模式选择一个或另一个模板(查看/编辑)
答案 2 :(得分:0)
标记的答案链接已经死了。
这可能有助于: http://wpf.codeplex.com/wikipage?title=Single-Click%20Editing