How can I prevent tabbing to a UserControl?

2020-02-10 18:23发布

I have a custom Popup that overlays part of my screen. When it is open, I want to disable tabbing into the UserControl behind it. I do not want to use the IsEnabled property because I do not want to gray out all the controls.

Is there another property that does the same thing? IsTabStop only prevents the tab from stopping on the UserControl itself, not it's children, and IsFocusable isn't a valid property for a UserControl.

5条回答
甜甜的少女心
2楼-- · 2020-02-10 18:51

You can bind IsTabStop on the child controls to IsTabStop on the UserControl.

That way, you only have to set it once.

查看更多
男人必须洒脱
3楼-- · 2020-02-10 18:51

Just bind that property to the user control.

    <UserControl x:Class="PDV.UserControls.InputField"
                 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                 // etc... then:                     
                 x:Name="Root" KeyboardNavigation.TabNavigation="Local" >

        <Grid>
           <TextBox Name="textBox"  
                TabIndex="{Binding Path=TabIndex, ElementName=Root}" 
                IsTabStop="{Binding Path=IsTabStop, ElementName=Root}"  />                
        </Grid>
    </UserControl>
查看更多
兄弟一词,经得起流年.
4楼-- · 2020-02-10 18:55

You could write an attached property that you would set in the top element.
That attached property would recursively set IsTabStop to false in all the child elements.

Let me know if you need any help getting this to work.

查看更多
Animai°情兽
5楼-- · 2020-02-10 18:56

The solution with KeyboardNavigation.TabNavigation="None" seems to bubble up to all other parent containers in my case. This is maybe not wanted in some scenarios. So I came up with a PreviewKeyDown-Event in code behind like this:

    private void OnPreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Tab)
        {
            ((Control)sender).Focus(); 
            e.Handled = true;
        }
    }
查看更多
不美不萌又怎样
6楼-- · 2020-02-10 19:06

Use the KeyboardNavigation.TabNavigation Attached Property with KeyboardNavigationMode.None on your container control.

KeyboardNavigation.TabNavigation="None"
查看更多
登录 后发表回答