在UWP应用程序(Windows 10)上,我在ListView中显示记录列表。
当我点击某个项目时,会显示其StackPanel(使用INotifyPropertyChanged)。 在StackPanel中,有一个TextBox,其中包含一些通过绑定填充的数据。
我希望每当StackPanel变得可见时TextBox会自动接收焦点,但我找不到要使用的属性或事件,以及如何触发textBox.Focus()。
感谢您对此的反馈!
<DataTemplate x:Key="templateList">
<StackPanel>
...
<StackPanel Visibility="{Binding IsSelected}">
<TextBox x:Name="textBox"
Text="{Binding Title, Mode=TwoWay}"/>
...
</StackPanel>
</StackPanel>
</DataTemplate>
...
<ListView x:Name="listView"
ItemsSource="{Binding mylist}"
ItemTemplate="{StaticResource templateList}"/>
答案 0 :(得分:2)
我建议在这种情况下使用Behaviors
。我注意到,您使用Visibility
类型作为IsSelected
属性。这意味着我们可以使用DataTriggerBehavior
并创建实现SetupFocusAction
的{{1}}
IAction
之后我们可以在XAML中使用此操作:
public class SetupFocusAction : DependencyObject, IAction
{
public Control TargetObject
{
get { return (Control)GetValue(TargetObjectProperty); }
set { SetValue(TargetObjectProperty, value); }
}
public static readonly DependencyProperty TargetObjectProperty =
DependencyProperty.Register("TargetObject", typeof(Control), typeof(SetupFocusAction), new PropertyMetadata(0));
public object Execute(object sender, object parameter)
{
return TargetObject?.Focus(FocusState.Programmatic);
}
}