【发布时间】:2014-05-15 22:26:38
【问题描述】:
我是 WPF 的新手,在尝试解决一个看似简单的问题时遇到了困难。
我需要设计一个数据表并允许用户对其进行编辑。当用户开始编辑单元格时,我需要在最右边的列 [OK] 和 [Cancel] 中显示一组按钮来接受或取消更改。当用户不编辑单元格时,应显示 [Delete] 按钮供用户删除行。
我编写了一个自定义控件,该控件将根据自定义 IsInEditMode 属性显示 [OK][Cancel] 或单个 [Delete] 按钮。
public partial class RowEditControl : UserControl
{
public static DependencyProperty
IsInEditModeProperty = DependencyProperty.Register( "IsInEditMode",
typeof(bool),
typeof(RowEditControl),
new FrameworkPropertyMetadata(OnEditModeChanged));
private static void OnEditModeChanged(DependencyObject aD, DependencyPropertyChangedEventArgs aE)
{
//depending on the value show [Delete] or [Ok][Cancel] buttons
}
}
当用户开始编辑单元格时,我需要以某种方式设置 IsInEditMode。我一直在寻找整个 msdn 和这个论坛的示例/方法,但找不到任何东西。
我像这样以编程方式将自定义控件添加到最后一列:
{
mwTagList.Columns[1].Width = new DataGridLength(1, DataGridLengthUnitType.Star);
var fRowEditTemplate = new FrameworkElementFactory(typeof (RowEditControl));
fRowEditTemplate.AddHandler(
RowEditControl.DeleteClickedEvent,
new RoutedEventHandler(OnDeleteRowBtn)
);
fRowEditTemplate.AddHandler(
RowEditControl.OkClickedEvent,
new RoutedEventHandler(OnRowEditOk));
fRowEditTemplate.AddHandler(
RowEditControl.CancelClickedEvent,
new RoutedEventHandler(OnRowEditCancel));
mwTagList.Columns.Add(
new DataGridTemplateColumn()
{
Header = "Delete Row",
CellTemplate = new DataTemplate() {VisualTree = fRowEditTemplate}
}
);
}
非常感谢您提供的任何信息和提示!
【问题讨论】:
标签: wpf wpfdatagrid