Я хочу представить список с TextBlocks в качестве элементов.Когда пользователь щелкает / выбирает элемент, он превращается в TextBox для редактирования.Как только элементы управления теряют фокус, элемент снова превращается в TextBlock.
Следующий XAML почти работает, так как TextBlock превращается в TextBox при его выборе.Он также возвращается к TextBlock, если я выбираю другой элемент в списке.Проблема заключается в том, что если я перехожу из списка (в данном случае в текстовое поле «Добавить новый»), элемент списка остается в виде текстового поля.
Вопрос ( WPF ListViewItem потерял фокус, событие - Какпопасть на мероприятие? ) выглядело многообещающе, но я не могу заставить его работать.Я попытался использовать свойство IsFocused, но тогда я не смог отредактировать текстовое поле, потому что, когда я попал в текстовое поле, элемент listbox терял бы фокус и, таким образом, возвращался к TextBlock, прежде чем у меня появилась возможность редактировать текст.
Как я могу заставить TextBox вернуться к TextBlock, если список / элемент теряет фокус?
(Любая другая реализация, которая достигает цели, также приветствуется)
<Window x:Class="MyView.MainWindow1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
Title="MainWindow1" Height="300" Width="200">
<Window.Resources>
<DataTemplate x:Key="ItemTemplate">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
<DataTemplate x:Key="SelectedTemplate">
<TextBox Text="{Binding Name, Mode=TwoWay}" />
</DataTemplate>
<Style TargetType="{x:Type ListBoxItem}" x:Key="ContainerStyle">
<Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}" />
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="ContentTemplate" Value="{StaticResource SelectedTemplate}" />
</Trigger>
</Style.Triggers>
</Style>
</Window.Resources>
<StackPanel >
<ListBox ItemsSource="{Binding Departments}" HorizontalContentAlignment="Stretch"
ItemContainerStyle="{StaticResource ContainerStyle}" />
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<TextBox Text="{Binding NewDepartmentName, Mode=TwoWay}" />
<Button Grid.Column="1" Width="50" Content="Add" Command="{Binding Path=AddNewDepartmentCommand}" />
</Grid>
</StackPanel>
</Window>