2014-10-20 2 views
0

ItemTemplate이 StringWrapper.Text에 바인딩 된 TextBox 인 ItemsControl에 바인딩 된 Paragraphs라는 ObservableCollectiong<StringWrapper> (StringWrapper/this post)이 있습니다.WPF ItemsControl - 항목이 추가 될 때 포커스 변경

XAML

<ItemsControl Name="icParagraphs" Grid.Column="1" Grid.Row="7" ItemsSource="{Binding Path=Paragraphs, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window}}"> 
    <ItemsControl.Template> 
     <ControlTemplate TargetType="ItemsControl"> 
      <StackPanel Orientation="Vertical"> 
       <ItemsPresenter /> 
      </StackPanel> 
     </ControlTemplate> 
    </ItemsControl.Template> 
    <ItemsControl.ItemTemplate> 
     <DataTemplate> 
       <TextBox Name="tbParagraph" TextWrapping="Wrap" AcceptsReturn="False" Text="{Binding Path=Text}" Grid.Column="0" KeyUp="tbParagraph_KeyUp" /> 
     </DataTemplate> 
    </ItemsControl.ItemTemplate> 
</ItemsControl> 

public class StringWrapper 
{ 
    public string Text { get; set; } 

    public StringWrapper() 
    { 
     Text = string.Empty; 
    } 

    public StringWrapper(string text) 
    { 
     Text = text; 
    } 
} 

나는 텍스트 상자에서 Enter 키를 누르면 내가 그렇게 만들려고 노력 해요, 내가 StringWrapper 후 내 ObservableCollection에있는 StringWrapper를 삽입 C#을 현재 포커스가있는 TextBox에 바인딩되어 새 TextBox를 생성합니다. 지금까지, 내 ​​코드는이 작업을 수행 할 수 있지만 몇 가지 결함이 있습니다.

내 질문은 어떻게 새로 생성 된 TextBox에 포커스를 설정합니까? 내가 알 수있는 한, 컨트롤 생성은 문자열을 삽입하는 함수가 반환 된 후에 발생합니다.

ItemsControl.ItemsSourceChanged 이벤트와 같은 것을 찾았지만 적어도 그 이름은 존재하지 않습니다. 나는 또한 ObservableCollection.CollectionChanged에 핸들러를 연결하려고 시도했으나 TextBox가 생성되기 전에 실행되는 것처럼 보였다. 마지막으로 ItemsControl.Template이 StackPanel이므로 StackPanel.ControlAdded 이벤트를 찾았지만 찾을 수 없습니다.

아이디어가 있으십니까? 감사!

+0

그건 속임수 였어! 감사! – dfoverdx

+0

멋진 의견을 받아 들일 수 있도록 답장으로 이동하십시오. –

+0

동일한 문제가 있지만 해결책을 얻지 못했습니다. – MSIslam

답변

1

CollectionChanged을 처리 한 다음 나중에 Dispatcher.BeginInvoke의 우선 순위가 Loaded 인 포커스 동작을 예약해야 할 수 있습니다. 그러면 ItemsControl에 컨테이너를 생성하고 레이아웃을 수행 할 수있는 기회가 주어집니다.

+0

Dispatcher.BeginInvoke를 사용하는 방법에 대해 조금 설명해 주시겠습니까? 작은 코드로 보여 주면 xaml 개발자가 아니므로 정말 도움이 될 것입니다. – MSIslam

관련 문제