Я использую TabControl для отображения списка элементов. Элемент ItemView - это отдельный элемент управления, который я написал.Установите фокус на кнопку в новом TabItem
<TabControl SelectedItem="{Binding CurrentItem}"
IsSynchronizedWithCurrentItem="True"
ItemsSource="{Binding ItemList}">
<TabControl.ContentTemplate>
<DataTemplate>
<ctrls:ItemView/>
</DataTemplate>
</TabControl.ContentTemplate>
<TabControl.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ShortItemDescription}"/>
</DataTemplate>
</TabControl.ItemTemplate>
</TabControl>
Если пользователь нажимает на кнопку новый ViewModel добавляется в список ViewModels и TabControl отображает его в новой вкладке. После добавления новой вкладки.
<Button Command="{Binding AddItemCommand}"
Content="Add item"/>
Внутри нового вида кнопка, которая должна быть сфокусирована каждый раз при добавлении новой вкладки. Я попытался использовать FocusManager и инициализированное событие в ItemView, но они вызываются только в первый раз, когда я добавляю новую вкладку.
<UserControl x:Class="ItemView"
...
Initialized="ViewInitialized">
<Grid>
...
<!-- Set focus to this button -->
<Button Content="Search"
Command="{Binding SearchCommand}"
Name="SearchButton"
Grid.Column="0"
Grid.Row="0"/>
</Grid>
</UserControl>
Любые идеи?
Update
Содержание метода Initialize в ItemView в настоящее время это один - который работает отлично ... в первый раз, а затем никогда
public delegate void ChangeFocusDelegate();
private void FocusSearchButton()
{
SearchButton.Focus();
}
private void ViewInitialized(object sender, EventArgs e)
{
ChangeFocusDelegate focusDelegate = FocusSearchButton;
Dispatcher.BeginInvoke(DispatcherPriority.ContextIdle, focusDelegate);
}
Я думаю, что вы имели в виду просмотр, когда вы написали ViewModel. Самое простое решение - обработать событие «tab_page _added» в коде, где задано фокус на кнопке – Arseny
Вы были правы - я изменил его. Есть ли событие tab_page_added? Я не нашел ничего подобного. Это было бы решением, если что-то подобное существует ... – Jan