我有一个程序,用户在其中选择 Datagrid 中的一行,然后单击“开始录制”按钮。在进行“录制”时,不允许他们更改在数据网格中选择的值,因此我将 IsEnabled 设置为 false。但是,当数据网格设置为禁用时,它会取消选择选定的行,这会破坏我对数据网格的 SelectedItem 属性的任何绑定。
即使控件被禁用,是否有任何方法可以保持选中数据网格行?
编辑:这在 Windows Vista 中不会发生,但在 Windows 7 中会发生。
我有一个程序,用户在其中选择 Datagrid 中的一行,然后单击“开始录制”按钮。在进行“录制”时,不允许他们更改在数据网格中选择的值,因此我将 IsEnabled 设置为 false。但是,当数据网格设置为禁用时,它会取消选择选定的行,这会破坏我对数据网格的 SelectedItem 属性的任何绑定。
即使控件被禁用,是否有任何方法可以保持选中数据网格行?
编辑:这在 Windows Vista 中不会发生,但在 Windows 7 中会发生。
IsHitTestVisible=false 禁用鼠标输入。
要禁用键盘输入,请设置 Focusable=false。
两者都应该通过 ElementStyle 和/或 ElementEditingStyle 中的样式设置为内置数据网格列,以便子控件(文本框、复选框等)不接受输入。
您很可能必须在样式中使用触发器并将其绑定到某个 IsRecording 值。
您也可以以相同的风格通过设置 Opacity=0.4 来更改“禁用”控件的外观,这会给它们带来某种禁用的感觉。
抱歉,我知道这篇文章有点老了,但我在其他任何地方都找不到另一个解决方案。
它似乎与 Vista\7 无关,但与 Toolkit 的 2 月版本有关。
您可以按照 Jeff Wain 的建议设置 IsHitTestVisible = false,但正如 Mike 指出的那样,它看起来并没有什么不同。此外,它不会禁用键盘输入。
我的解决方案是将 DataGrid 放在与半透明灰色矩形相同的行和列中的 Grid 中(这将使它们彼此重叠)。您必须将矩形放在第二个网格中,以确保它位于 DataGrid 的顶部。当我想“禁用”它时,我使矩形可见。这将使列表看起来变暗并禁用鼠标输入,但它仍然不会禁用键盘输入。
要禁用键盘,我必须拦截“PreviewKeyDown”并设置 e.Handdled = true。这将不允许选择其他任何内容,但是当您选择它时仍然会做一些有趣的事情(例如选项卡不再工作)。也许将其设置为不是制表位且不可聚焦也可以解决此问题,但我真正关心的是禁用选择。
如果您确实想“记录”动作但仍保持视觉效果和交互看起来相同,为什么不只是在选择时触发的事件中添加一个检查以确保没有发生记录并设置 e.Handled = true。
或者,您可以设置 IsHitTestVisible = false 并阻止他们在控件中执行操作,而不是完全禁用它。
希望有帮助。