WPF ComboBox和IsTabStop行为

Luc*_*ini 5 .net wpf combobox

ComboBox对WPF的控制有问题.

我试图将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>
Run Code Online (Sandbox Code Playgroud)

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

DatePicker似乎也有同样的问题.

小智 5

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

  • 尼斯.为了记录,我不得不使用TabStop ="False"和KeyboardNavigation.TabNavigation ="None"来使其按预期工作.WPF再次成为WPF .... (2认同)

Bek*_*pov 2

是的,似乎是 ComboBox 的问题,有人向微软提出了这个问题:

看看这里。似乎有一个解决方法。

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

var textBox = myCbo.Template.FindName("PART_EditableTextBox", myCbo) as TextBox;
if (textBox != null)
   textBox.IsTabStop = myCbo.IsTabStop;
Run Code Online (Sandbox Code Playgroud)

将 myCbo 更改为您的组合框名称。