Нужно сфокусировать текстовое поле внутри элемента treeview на измененном выборе
Treeview имеет несколько элементов Treeview, каждый TreeviewItem имеет 3 текстовых поля и одну кнопку, когда любой treeview выбран, нам нужно сфокусировать первое текстовое поле внутри него.Его изменение в коде, но не обновление пользовательского интерфейса.
Что я уже пробовал:
Wpf code <pre> <HierarchicalDataTemplate ItemsSource="{Binding GroupMappings}" DataType="{x:Type models:GroupModel}" > <Border BorderBrush="Gray" BorderThickness="0,0,0,0" Margin="-5,0,0,0" > <StackPanel Orientation="Horizontal" Height="30" KeyboardNavigation.TabNavigation="Cycle" KeyboardNavigation.ControlTabNavigation="Continue" KeyboardNavigation.DirectionalNavigation="None"> <StackPanel.Style> <Style TargetType="{x:Type StackPanel}"> <Setter Property="IsEnabled" Value="False" /> <Style.Triggers> <DataTrigger Binding="{Binding IsSelected}" Value="true"> <Setter Property="IsEnabled" Value="True" /> <Setter Property="Background" Value="PowderBlue" /> </DataTrigger> </Style.Triggers> </Style> </StackPanel.Style> <TextBox Name="GroupText" Width="70" Text="{Binding MaxTransactionLimit,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay,TargetNullValue=''}" Height="25" VerticalContentAlignment="Center" TextChanged="TextBox_TextChanged" PreviewKeyDown="UpdateData"> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Style.Triggers> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="ToolTip"> <Setter.Value> <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}"> <ItemsControl ItemsSource="{Binding Path=(Validation.Errors)}" DisplayMemberPath="ErrorContent" /> </ToolTip> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox> <TextBox Width="70" Text="{Binding LongPosition,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay,TargetNullValue=''}" Height="25" VerticalContentAlignment="Center" Margin="5,0,0,0" TextChanged="TextBox_TextChanged" PreviewKeyDown="UpdateData" > <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Style.Triggers> <!--<DataTrigger Binding="{Binding IsLimitExists}" Value="false"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger>--> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="ToolTip"> <Setter.Value> <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}"> <ItemsControl ItemsSource="{Binding Path=(Validation.Errors)}" DisplayMemberPath="ErrorContent" /> </ToolTip> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox> <TextBox Width="70" Text="{Binding ShortPosition,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay,TargetNullValue=''}" Height="25" VerticalContentAlignment="Center" Margin="5,0,0,0" TextChanged="TextBox_TextChanged" PreviewKeyDown="UpdateData" > <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Style.Triggers> <!--<DataTrigger Binding="{Binding IsLimitExists}" Value="false"> <Setter Property="Visibility" Value="Collapsed" /> </DataTrigger>--> <Trigger Property="Validation.HasError" Value="True"> <Setter Property="ToolTip"> <Setter.Value> <ToolTip DataContext="{Binding RelativeSource={RelativeSource Self}, Path=PlacementTarget}"> <ItemsControl ItemsSource="{Binding Path=(Validation.Errors)}" DisplayMemberPath="ErrorContent" /> </ToolTip> </Setter.Value> </Setter> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox> <Button Content="Clear" Click="ClearGroupLimit" Width="50" Margin="5,0,0,0" Height="25" PreviewKeyDown="UpdateData"/> </StackPanel> </Border> </HierarchicalDataTemplate>
&ЛТ;TreeView элемент х:имя="MainTreeView" поле HorizontalAlignment="стрейч" имеет="растянуть" запас="0,0,0,0", что ItemsSource="{привязки ограничения}" сетки.строка="0" selecteditemchanged="MainTreeView_SelectedItemChanged"&ГТ;
код c#
частная MainTreeView_SelectedItemChanged недействительным(объект отправителя, RoutedPropertyChangedEventArgs в<Объект> По электронной)
{
var selectedTreeview = MainTreeView.ItemContainerGenerator.ContainerFromItem (((TreeView)sender).Элемент);
var selectedItem = ((TreeView)sender).Элемент;
if (selectedTreeview is TreeViewItem treeViewItem)
{
если (FindVisualChild&ЛТ;элемент StackPanel&ГТ;(treeViewItem как класса DependencyObject) - это элемент StackPanel элемент StackPanel)
{
если (элемент StackPanel.Children[0] is TextBox текстовое поле)
{
текстовый.Сосредоточить();
Клавиатура.Фокус(текстовое поле);
е.Обработано = истина;
}
}
}
}