WPF ComboBox& IsTabStop行为

时间:2011-07-05 08:37:16

标签: .net wpf combobox

我在WPF上遇到ComboBox控制问题。

我尝试将IsTabStop属性设置为可控,但它无法按预期工作。

如果ComboBox无法编辑,IsTabStop可以正常使用,但如果ComboBox可编辑,则始终会从键盘导航中获得焦点。 IsTabStop = false无效!

此外,当ComboBox可编辑且IsTabStop为真时,键盘导航到上一个控件“已锁定”...“Shift + Tab”不起作用!

这是WPF错误吗?有没有解决方法?

我正在使用.Net 4.0。

这是一个例子......

<Window
   x:Class="MainWindow"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   Title="MainWindow"
   Height="250"
   Width="600">

   <StackPanel
     Orientation="Horizontal"
     VerticalAlignment="Center">
     <TextBox
        Width="50"
        IsTabStop="True">
     </TextBox>
    <ComboBox
        Name="cmb1"
        Margin="10,0,0,0"
        Width="50"
        IsEditable="True"
        IsTabStop="False">
    </ComboBox>
    <DatePicker
        Name="dp1"
        Margin="10,0,0,0"
        Width="50"
        IsTabStop="True">
    </DatePicker>
    <TextBox
        Margin="10,0,0,0"
        Width="50"
        IsTabStop="False">
    </TextBox>
    <ComboBox
        Name="cmb2"
        Margin="10,0,0,0"
        Width="50"
        IsTabStop="False">
    </ComboBox>
    <ComboBox
        Name="cmb3"
        Margin="10,0,0,0"
        Width="50"
        IsEditable="True"
        IsTabStop="True">
    </ComboBox>

   </StackPanel>
 </Window>

尝试使用选项卡从第一个文本框导航到最后一个组合框...“cmb1”同时使用IsTabStop = False,“cmb2”是好的因为它不可编辑,在“cmb3”上它不可能返回到之前的控件Shift + Tab键。

DatePicker似乎也有同样的问题。

2 个答案:

答案 0 :(得分:5)

有点晚了,但前几天我看到了同样的问题。我发现KeyboardNavigation.TabNavigation="None"解决了这个问题。

答案 1 :(得分:2)

是的,似乎是ComboBox的问题,有人用microsoft提出了它:

Have a look here。它似乎有一个解决方法。

这是一种解决方法。在窗口/控件的Loaded事件中放置此代码:

var textBox = myCbo.Template.FindName("PART_EditableTextBox", myCbo) as TextBox;
if (textBox != null)
   textBox.IsTabStop = myCbo.IsTabStop;

将myCbo更改为组合框名称。