我正在使用NumericUpDown控件(来自WPF扩展工具包版本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
}
}
当我将Property IsFocusedMenge设置为true时,将不会设置焦点。当我在那里设置断点时,将调用代码行fe.Focus()。
我在这里找到了另一个主题(How to set focus on NumericUpDown control?),但是当我设置这个属性Focusable = true时,我会在调用fe.Focus()方法时得到一个StackOverFlowException。
有什么想法吗? THX。
更新
还尝试向网格添加事件,在View / UserControl中设置焦点......但没有成功。
private void GridMenge_IsVisibleChanged(object sender, DependencyPropertyChangedEventArgs e)
{
if ((bool)e.NewValue)
{
this.Menge.Focus();
}
}
仍未设置焦点(Property Focusable设置为True / False - 无变化)
答案 0 :(得分:0)
我从官方支持部门获得了一些信息。
这已经修复了。该修复程序包含在v3.1中。 (您可以在此处查看讨论主题:https://wpftoolkit.codeplex.com/discussions/658785)
要修复它,请进入文件:
<强> Xceed.wpf.Toolkit /的NumericUpDown /主题/ Aero2.NormalColor.xaml 强> (适用于Windows8及更高版本)
<强> Xceed.wpf.Toolkit /的NumericUpDown /主题/ Generic.xaml 强> (对于其他Windows)
在&#34; NumericUpDown&#34;的样式中
a)替换
<Setter Property="Focusable" Value="False" />
带
<Setter Property="IsTabStop" Value="False" />
b)在&#34; PART_TextBox&#34;
替换
IsTabStop="{TemplateBinding IsTabStop}"
带
IsTabStop="True"