2016-08-04 2 views
1

UWP 앱 (Windows 10)에서 ListView에 레코드 목록을 표시하고 있습니다.ListView 항목의 TextBox에서 포커스를 설정하는 방법?

항목을 클릭하면 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 x:Name="listView" 
      ItemsSource="{Binding mylist}" 
      ItemTemplate="{StaticResource templateList}"/> 

답변

2

나는이 사건에 대한 사용 Behaviors을 제안 할 수 있습니다. 내가 알기에 IsSelected 속성에는 Visibility 유형을 사용합니다. 그것은 우리가 우리가 XAML에서이 작업을 사용할 수 있습니다 DataTriggerBehavior를 사용하여 우리의 SetupFocusAction가되는 그 후 IAction

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

을 구현 만들 수 있다는 것을 의미한다 : 이것에 대한

xmlns:i="using:Microsoft.Xaml.Interactivity" 
xmlns:core="using:Microsoft.Xaml.Interactions.Core" 

... 

<StackPanel Visibility="{Binding IsSelected}" 
      Grid.Row="1"> 
    <TextBox x:Name="textBox" 
       Text="{Binding Title, Mode=TwoWay}"> 
     <i:Interaction.Behaviors> 
      <core:DataTriggerBehavior Binding="{Binding IsSelected}" 
             ComparisonCondition="Equal" 
             Value="Visible"> 
       <local:SetupFocusAction TargetObject="{Binding ElementName=textBox}"/> 
      </core:DataTriggerBehavior> 
     </i:Interaction.Behaviors> 
    </TextBox> 
</StackPanel> 

enter image description here

+0

많은 감사를! 나는 노력해 왔지만 C# 부분에 다음과 같은 오류가 발생합니다. CS0246 \t 'IAction'유형 또는 네임 스페이스 이름을 찾을 수 없습니다 (사용 지시문 또는 어셈블리 참조가 누락 되었습니까?). 어떤 지시어를 사용해야합니까? 비헤이비어를 사용하려면 특정 참조를 추가해야합니까? – Daniel

+0

[Nuget] (https://www.nuget.org/packages/Microsoft.Xaml.Behaviors.Uwp.Managed/)을 통해 라이브러리를 추가 할 수 있습니다. –

+0

프로젝트 용 Template10 라이브러리를 설치했는데 예상대로 작동합니다! 도와 주셔서 다시 한번 감사드립니다 :-) – Daniel