Wpf 将焦点设置为用户控件时,自DataContext绑定有时不起作用
我们有一个带有菜单树和Tabcontrol的WPF应用程序。 单击TreeView中的菜单项时,将创建一个新的UserControl并将其分配给选项卡项中的。 此新用户控件将嵌套用户控件作为其内容。这里,父用户控件具有直接数据上下文绑定(即this.DataContext=SampleViewModel),所有嵌套/子用户控件都具有自数据绑定(即“DataContext={binding}”),因为它仅使用父用户的DataContext 一旦WPF应用程序获得工具用户控件,它将把用户控件放在Tabitem中,并将键盘焦点设置到用户控件上。下面是为实现此工作流程而执行的代码序列Wpf 将焦点设置为用户控件时,自DataContext绑定有时不起作用,wpf,data-binding,Wpf,Data Binding,我们有一个带有菜单树和Tabcontrol的WPF应用程序。 单击TreeView中的菜单项时,将创建一个新的UserControl并将其分配给选项卡项中的。 此新用户控件将嵌套用户控件作为其内容。这里,父用户控件具有直接数据上下文绑定(即this.DataContext=SampleViewModel),所有嵌套/子用户控件都具有自数据绑定(即“DataContext={binding}”),因为它仅使用父用户的DataContext 一旦WPF应用程序获得工具用户控件,它将把用户控件放在Ta
- 将焦点从先前选择的tabitem-->转移到当前选项卡项,这是将焦点从先前选择的用户控件转移到当前用户控件
- 更新成功打开菜单项的菜单树-->这将突出显示单击的菜单项
Application.Current.Dispatcher.BeginInvoke(new Action(delegate
{
if (this.selectedTabItem != null && this.selectedTabItem.ToolUserControl != null)
{
(this.SelectedTabItem.ToolUserControl).Focus();
(this.SelectedTabItem.ToolUserControl).Focusable = true;
Keyboard.Focus(this.SelectedTabItem.ToolUserControl);
}
}), DispatcherPriority.Background, null);
<UserControl x:Class="SampleApp.ExtrauserControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d" DataContext="{Binding }"
d:DesignHeight="300" d:DesignWidth="300">
<TextBox Height="20" Name="sampleText" Margin="10"
Text="{Binding Path=ExtraUCText, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay,
NotifyOnSourceUpdated=True, NotifyOnTargetUpdated=True}"/>
</UserControl>
当内部用户控件的数据上下文属性绑定为“DataContext={Binding}”时
如果我们在BeginInvoke()和Invoke()调用之间进行选择,自数据绑定会受到什么影响??
在调用usercontrol上与Focus()相关的API之前,是否需要遵循任何顺序
请建议如何解决这个问题
提前感谢,
潘卡哈。S问题在于用户控件未渲染或焦点设置不正确?内部用户控件未渲染内部用户控件如果您根本没有使用Invoke或BeginInvoke设置焦点,则内部用户控件将渲染?是。即使使用BeginInvoke()内部用户控件也可以完全渲染。问题发生在Invoke()上为了回答第一个问题,问题发生在内部用户控件的数据上下文上,其中in-Data-Context变为null,因为数据绑定失败了w.r.t内部用户控件。最终结果是内部用户控件未在UI上呈现。问题是,用户控件未呈现,还是焦点设置不正确?内部用户控件未呈现。如果您根本没有使用Invoke或BeginInvoke设置焦点,则内部用户控件将呈现?是。即使使用BeginInvoke()内部用户控件也可以完全渲染。问题发生在Invoke()上为了回答第一个问题,问题发生在内部用户控件的数据上下文上,其中in-Data-Context变为null,因为数据绑定失败了w.r.t内部用户控件。最终结果是内部用户控件不会呈现在UI上。