NumericUpDown - 未设置焦点
NumericUpDown - Focus not set
我正在使用 NumericUpDown 控件(来自 WPFs 扩展工具包版本 2.9),我正试图通过附加的 属性.
将焦点设置在它上面
我的XAML
<xctk:DecimalUpDown FormatString="F5"
wbui:FocusExtension.IsFocused="{Binding Path=IsFocusedMenge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Value="{Binding Path=Menge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
这是我的FocusExtensiion.IsFocues
private static void IsFocusedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var fe = (FrameworkElement)d;
if (e.OldValue == null)
{
fe.GotFocus += FrameworkElement_GotFocus;
fe.LostFocus += FrameworkElement_LostFocus;
}
if (!fe.IsVisible)
{
fe.IsVisibleChanged += new DependencyPropertyChangedEventHandler(FrameworkElement_IsVisibleChanged);
}
if ((bool)e.NewValue)
{
fe.Focus(); // will be called
}
}
当我将 属性 IsFocusedMenge 设置为 true 时,将不会设置焦点。当我在那里设置断点时,将调用代码行 fe.Focus()。
我在这里找到了另一个主题(How to set focus on NumericUpDown control?),但是当我设置这个属性Focusable=true时,我在调用fe.Focus()方法时会得到一个WhosebugException。
有什么想法吗?谢谢
更新
还尝试将事件添加到网格,以在 View/UserControl 中设置焦点...但没有成功。
private void GridMenge_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
{
this.Menge.Focus();
}
}
焦点仍未设置(属性 可聚焦设置为 True/False - 无变化)
我从官方支持那里得到了一些信息
这已经修复。该修复包含在 v3.1 中。
(您可以在此处查看讨论主题:https://wpftoolkit.codeplex.com/discussions/658785)
要修复它,请进入文件:
Xceed.wpf.Toolkit/NumericUpDown/Themes/Aero2.NormalColor.xaml
(Windows8 及以上)
Xceed.wpf.Toolkit/NumericUpDown/Themes/Generic.xaml
(对于其他 Windows)
符合 "NumericUpDown"
的样式
a) 替换
<Setter Property="Focusable" Value="False" />
和
<Setter Property="IsTabStop" Value="False" />
b) 在 "PART_TextBox"
替换
IsTabStop="{TemplateBinding IsTabStop}"
和
IsTabStop="True"
我正在使用 NumericUpDown 控件(来自 WPFs 扩展工具包版本 2.9),我正试图通过附加的 属性.
将焦点设置在它上面我的XAML
<xctk:DecimalUpDown FormatString="F5"
wbui:FocusExtension.IsFocused="{Binding Path=IsFocusedMenge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
Value="{Binding Path=Menge, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
/>
这是我的FocusExtensiion.IsFocues
private static void IsFocusedChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var fe = (FrameworkElement)d;
if (e.OldValue == null)
{
fe.GotFocus += FrameworkElement_GotFocus;
fe.LostFocus += FrameworkElement_LostFocus;
}
if (!fe.IsVisible)
{
fe.IsVisibleChanged += new DependencyPropertyChangedEventHandler(FrameworkElement_IsVisibleChanged);
}
if ((bool)e.NewValue)
{
fe.Focus(); // will be called
}
}
当我将 属性 IsFocusedMenge 设置为 true 时,将不会设置焦点。当我在那里设置断点时,将调用代码行 fe.Focus()。
我在这里找到了另一个主题(How to set focus on NumericUpDown control?),但是当我设置这个属性Focusable=true时,我在调用fe.Focus()方法时会得到一个WhosebugException。
有什么想法吗?谢谢
更新
还尝试将事件添加到网格,以在 View/UserControl 中设置焦点...但没有成功。
private void GridMenge_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
{
this.Menge.Focus();
}
}
焦点仍未设置(属性 可聚焦设置为 True/False - 无变化)
我从官方支持那里得到了一些信息
这已经修复。该修复包含在 v3.1 中。 (您可以在此处查看讨论主题:https://wpftoolkit.codeplex.com/discussions/658785)
要修复它,请进入文件:
Xceed.wpf.Toolkit/NumericUpDown/Themes/Aero2.NormalColor.xaml (Windows8 及以上)
Xceed.wpf.Toolkit/NumericUpDown/Themes/Generic.xaml (对于其他 Windows)
符合 "NumericUpDown"
的样式a) 替换
<Setter Property="Focusable" Value="False" />
和
<Setter Property="IsTabStop" Value="False" />
b) 在 "PART_TextBox"
替换
IsTabStop="{TemplateBinding IsTabStop}"
和
IsTabStop="True"