2011-12-14 26 views
2

我处于项目的后期阶段,我有一个带有(自定义.net4)日历和(再次自定义)按钮的屏幕。按钮反应迟钝.net 4日历(bug?)

无论何时选择一个日期,该按钮变为休眠状态,它不会切换到悬停可视状态,并且不会注册它的第一次点击。然而,一旦它被点击,它就会恢复为正常按钮,触发命令,切换视觉状态等等,至少直到你再次改变了你的想法。

我最初的想法是焦点,假设有日历和按钮之间的重点或类似的东西,坦率地说我对WPF焦点并不太热,但还没有找到任何理论支持。

我已经成功与此重复它(在kaxaml测试):

<StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> 
    <Calendar /> 
    <Button>Hello, world!</Button> 
    </StackPanel> 

,它是与WPF工具包相同(2010年2月)日历..

编辑:我忘了提及,虽然我使用按钮进行测试,但我还没有发现这个不起作用的UI元素,选择calendarDayButton甚至会使Kaxamls UI进入休眠状态。

回答

3

Calendar控件似乎在单击时捕获鼠标。您可以通过释放GotMouseCapture事件中的鼠标捕获来摆脱此行为。

不知道这样做的副作用是,但代码释放捕获看起来是这样的:

private void Calendar_GotMouseCapture(object sender, MouseEventArgs e) 
{ 
    if (e.OriginalSource is CalendarItem) 
     Mouse.Capture(null); 
} 

编辑

在测试为什么松开鼠标是导致导航停止工作,并且经过一些测试发现点击日历上的某些项目将捕捉焦点,而其他项目则不会。窃取鼠标的项目总是有System.Windows.Controls.Primitives.CalendarIteme.OriginalSource,所以增加了一个检查,只有释放鼠标捕获如果e.OriginalSource类型为CalendarItem

+0

好找,能很好的完成了CalendarDayButtons,但日历导航按钮不起作用。我写了一个MEGA hack,在释放鼠标捕获之前等待300毫秒,然后导航备份。会继续寻找一个干净的SLN =] – 2011-12-14 14:34:12

相关问题