我在WPF中的Window
上放置了3个conrtols,每个控件包含一个或多个TextBox
和Button
,当选择新控件时我想更改{{ 1}}到那个按钮。我目前正在做的是当IsDefault
的{{1}}事件被触发时,我将TextBox
更改为GotFocus
。这是第一次工作但是当我从一个控件更改为另一个控件并返回到第一个选定控件时,第二个控件Button
仍然为真,当按下enter时它会触发IsDefault
事件的错误控制。
有没有办法可以清除窗口上的所有IsDefault
属性,或者对我目前的做法有什么更好的解决方案?例如,请参见下图,按下输入后,Click
会触发“...”,而不是快速搜索。
XAML(更新)
IsDefault
答案 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
属性