c# - 删除 WPF IsDefault

标签 c# wpf button

我在 WPF 中的 Window 上放置了 3 个控件,每个控件都包含一个或多个 TextBoxButton,当添加新控件时选择我想将 IsDefault 更改为该按钮。我当前正在做的是,当触发 TextBoxGotFocus 事件时,我将 Button 更改为 IsDefault 。这是第一次工作,但是当我从一个控件更改为另一个控件,然后返回第一个选定的控件时,第二个控件 IsDefault 仍然为 true,当按下 Enter 时,它会触发 Click 错误控件上的事件。

有没有办法可以清除窗口上的所有 IsDefault 属性,或者对于我当前的做法有什么更好的解决方案?例如,请参见下图,当按下 Enter 时,会触发带有“...”的 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>

最佳答案

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

关于c# - 删除 WPF IsDefault,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20119630/

相关文章:

c# - 全局按钮的动态样式,每个按钮都有不同的图像

c# - 从 C# 中的 Rust DLL 获取 UTF-8 编码的字符串

c# - xaml无法识别模型的属性(WPF MVVM)

c - 做一些事情,但检查按钮是否一直被点击

c# - WPF ItemsControl IsMouseOver 未按预期工作

c# - 选择一周中的哪几天?

android - 为什么我的按钮在第一次点击时不起作用?

c# - 获取C#中隐藏输入字段的值

c# - 当 ContinueWith 与 System.Threading.Tasks.Task 一起使用时,单元测试失败

C# WebAPI - 获取完整的 HTTP 请求