基础:我正在使用 MVVM 模式或其子集。
在我的主窗口中,我有一个按钮,可以打开一个带有新 DataContext 的用户控件,该函数看起来有点像这样:
public void SetUserControl()
{
UCDatacontext = new UCViewModel(this);
base.OnPropertyChanged("UCDatacontext");
UCViewVisibilty = Visibility.Visible;
UCDatacontext.IniFocus();
}
然后当我完成后,我关闭用户控件并处理 DataContext。现在我遇到的问题是我似乎无法让焦点设置正常工作,我在用户控件中有一个文本框,我想在视图变为可见时将焦点设置为。然而,在我第一次尝试设置焦点时,它只用一个不闪烁的插入符号填充文本框,经过调查,我相信这是因为 TB 没有获得键盘焦点(只有逻辑焦点),但即使在明确设置键盘焦点后,我仍然得到不眨眼的插入符号,并且只有在点击 TB 之后它才会获得焦点。我用来设置焦点的方法与此处描述的方法类似。
如果在视图中我通过在 FocusSet 事件中打印出它确实设置的文本框来进行一些写行调试,但是仅在我第一次调用 SetUserControl() 时。如果我再次调用 SetUserControl() 它什么也不做,除了使视图可见但不触发焦点设置事件。
以下是 MainWindow 中的代码行:
<Grid Grid.ColumnSpan="5" Grid.RowSpan="5" Visibility="{Binding Path=UCViewVisibilty }" x:Name="UCGrid" >
<Grid.Effect>
<DropShadowEffect />
</Grid.Effect>
<View:UCView DataContext="{Binding Path=UCDatacontext}" />
</Grid>
和用户控制网格:
<Grid >
<TextBox Uid="UCTB" localExtensions:FocusExtension.IsFocused="{Binding Path=UCTBFocus}" Height="23" HorizontalAlignment="Left" Margin="113,56,0,0" Name="UCTB" VerticalAlignment="Top" Width="165" Text="{Binding Path=UCTBContent, UpdateSourceTrigger=PropertyChanged}" GotFocus="UCTB_GotFocus" />
</Grid >
Focus 在 UserControlViewModel 中设置,在 Usercontrol 渲染后设置。