首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >WPF InputGesture在TextInput处理程序中隐藏字符,即使在禁用命令时也是如此。

WPF InputGesture在TextInput处理程序中隐藏字符,即使在禁用命令时也是如此。
EN

Stack Overflow用户
提问于 2014-08-13 15:00:34
回答 1查看 61关注 0票数 1

我有这个:

代码语言:javascript
运行
复制
public static RoutedUICommand SplitLine = 
    new RoutedUICommand("Split Line", "SplitLine", typeof(TabItem), 
        new InputGestureCollection(
           new InputGesture[] { new KeyGesture(Key.OemPeriod) }));

它允许我通过点击一个SplitLine命令来运行OemPeriod命令。到目前为止效果很好。

接下来,我将看到以下内容,它在某些条件下正确禁用SplitLine:

代码语言:javascript
运行
复制
static void splitline_CanExecute(object sender, CanExecuteRoutedEventArgs e) {
    e.CanExecute = FalseForSomeReason();
}

问题是,我也有这段代码,当SplitLine无法执行时,它是功能性的:

代码语言:javascript
运行
复制
void myControl_TextInput(object sender, TextCompositionEventArgs e) {
    // this code never gets an OemPeriod;
}

问题是TextInput处理程序从未看到OemPeriod。其他的话也没问题。我也尝试过TextInput,PreviewTextInput,Keydown -- OemPeriod没有通过任何这些。

在禁用OemPeriod命令时,是否可以通过TextInput (或其他什么)查看TextInput控件中的SplitLine?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-21 16:00:31

正确的解决方案是,当ContinueRouting为false时,在CanExecute方法中设置CanExecute标志:

代码语言:javascript
运行
复制
static void splitline_CanExecute(object sender, CanExecuteRoutedEventArgs e) {
    e.CanExecute = FalseForSomeReason();
    if (e.CanExecute == false) e.ContinueRouting = true;   // <=== Add this!
}

这允许OemPeriod继续寻找处理它的东西(在本例中是TextInput处理程序)。如果没有这一点,OemPeriod的所有处理都会在CanExecute拒绝时停止。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25289601

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档