2013-11-21 40 views
2

我有3个控件放在我的WPF Window上,每个控件包含一个或多个TextBoxButton,当选择一个新的控件时,我想将IsDefault更改为该按钮。我目前所做的是当TextBoxGotFocus事件被解雇时,我将我的Button更改为IsDefault。这是第一次工作,但当我从一个控件更改为另一个控件时,回到第一个选定的控件时,第二个控件IsDefault仍然为true,并且当按下Enter时,它会触发错误控件上的Click事件。删除WPF IsDefault

有没有一种方法可以清除我窗口上的所有IsDefault属性,或者对于我目前的这种做法,有什么更好的解决方案?例如,看下面的图片,当输入被按下时,带有“...”的Button被激发而不是快速搜索。

enter image description here

XAML(更新)

<odc:OdcTextBox Text="{Binding AccountNumber, UpdateSourceTrigger=PropertyChanged}" MinWidth="100" Name="txtAccountNumber" Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" Margin="{Binding TextMargin}"> 
     <odc:OdcTextBox.Buttons> 
      <Button IsDefault="{Binding ElementName=txtAccountNumber, Path=IsKeyboardFocusWithin}" Width="30" Style="{StaticResource DionysusButton}" x:Name="btnCdv" Content="..."> 

      </Button> 
     </odc:OdcTextBox.Buttons> 
    </odc:OdcTextBox> 

回答

1

同样给你如何使用TextBoxGotFocus事件,你可以做这样的逆并使用LostFocus事件重置IsDefault属性

+0

也许不是最好的解决方案,但它完美的工作,使用像其他答案一样的绑定将是理想的,但它的工作原理! Thanx –

+0

同意这不是最好的解决方案,其他答案肯定是更优雅,这就是为什么我upvoted那一个。这是一个耻辱,你不能得到它的工作。 – Joe

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="..."> 
+0

嗨,不幸的是,这似乎并没有工作。当我切换到第二个控制时,“IsDefault”不起作用,即输入不会触发“Click”。 –

+0

我在我的输出窗口中发现了这个: System.Windows.Data错误:4:找不到与参考'ElementName = txtAccountNumber'绑定的源。 BindingExpression:路径= IsKeyboardFocusWithin;的DataItem = NULL;目标元素是'Button'(Name ='btnCdv');目标属性是'IsDefault'(类型'布尔') –

+0

你能发布有问题的位的xaml片段吗? – GazTheDestroyer