如何在ListView项的TextBox中设置焦点?

时间:2016-08-04 21:10:05

标签: c# listview uwp setfocus

在UWP应用程序(Windows 10)上,我在ListView中显示记录列表。

当我点击某个项目时,会显示其StackPanel(使用INotifyPropertyChanged)。 在StackPanel中,有一个TextBox,其中包含一些通过绑定填充的数据。

我希望每当StackPanel变得可见时TextBox会自动接收焦点,但我找不到要使用的属性或事件,以及如何触发textBox.Focus()。

感谢您对此的反馈!

DataTemplate:

    <DataTemplate x:Key="templateList">
        <StackPanel>
...
            <StackPanel Visibility="{Binding IsSelected}">
                <TextBox x:Name="textBox"
                         Text="{Binding Title, Mode=TwoWay}"/>
...
            </StackPanel>
        </StackPanel>
    </DataTemplate>
...

ListView:

<ListView x:Name="listView" 
          ItemsSource="{Binding mylist}" 
          ItemTemplate="{StaticResource templateList}"/>

1 个答案:

答案 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);
    }
}

enter image description here