Found an easy solution.
Attach AccessKeyPressed
hander to all TabItems
and change EventArgs
scope there only if we switch from TabItem
with header "Tab_B".
<TabControl>
<TabItem Header="Tab_A" AccessKeyManager.AccessKeyPressed="TabItem_AccessKeyPressed"/>
<TabItem Header="Tab_B" AccessKeyManager.AccessKeyPressed="TabItem_AccessKeyPressed">
<WebBrowser Source="http://google.com" />
</TabItem>
<TabItem Header="Tab_C" AccessKeyManager.AccessKeyPressed="TabItem_AccessKeyPressed"/>
<TabItem Header="Tab_D" AccessKeyManager.AccessKeyPressed="TabItem_AccessKeyPressed"/>
</TabControl>
Handler:
private void TabItem_AccessKeyPressed(object sender, AccessKeyPressedEventArgs e)
{
var src = ((sender as TabItem)?.Parent as TabControl)?.SelectedItem as TabItem;
if (src?.Header as string == "Tab_B")
e.Scope = src;
}