删除WPF IsDefault

时间:2013-11-21 11:23:21

标签: c# wpf button

我在WPF中的Window上放置了3个conrtols,每个控件包含一个或多个TextBoxButton,当选择新控件时我想更改{{ 1}}到那个按钮。我目前正在做的是当IsDefault的{​​{1}}事件被触发时,我将TextBox更改为GotFocus。这是第一次工作但是当我从一个控件更改为另一个控件并返回到第一个选定控件时,第二个控件Button仍然为真,当按下enter时它会触发IsDefault事件的错误控制。

有没有办法可以清除窗口上的所有IsDefault属性,或者对我目前的做法有什么更好的解决方案?例如,请参见下图,按下输入后,Click会触发“...”,而不是快速搜索。

enter image description here

XAML(更新)

IsDefault

2 个答案:

答案 0 :(得分:2)

<Button IsDefault={Binding IsKeyboardFocusWithin, ElementName=ThisGroupBox} />

编辑:

您的代码略有不同,因为您要为某些自定义控件提供按钮。这些按钮在不同的范围内声明它们最终的位置(即我假设它们最终位于某个地方的OdcTextBox模板内)。我怀疑这就是为什么WPF无法找到命名元素的原因,因为该元素是在外部范围内命名的。

您可以尝试使用RelativeSource代替父OdcTextBox

<Button IsDefault="{Binding IsKeyboardFocusWithin, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type odc:OdcTextBox}}}" 
        Width="30" Style="{StaticResource DionysusButton}" x:Name="btnCdv" Content="...">

答案 1 :(得分:1)

与您使用TextBox GotFocus事件的方式类似,您可以执行相反操作并使用LostFocus事件重置IsDefault属性