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 이벤트를 찾았지만 찾을 수 없습니다.
아이디어가 있으십니까? 감사!
그건 속임수 였어! 감사! – dfoverdx
멋진 의견을 받아 들일 수 있도록 답장으로 이동하십시오. –
동일한 문제가 있지만 해결책을 얻지 못했습니다. – MSIslam