Treeview has multiple Treeview items, each TreeviewItem has 3 textboxes and one button, when any treeview is selected we need to focus the first textbox inside it.Its changing in code but not updating the UI.
What I have tried:
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 x:name="MainTreeView" horizontalalignment="Stretch" verticalalignment="Stretch" margin="0,0,0,0" itemssource="{Binding Limits}" grid.row="0" selecteditemchanged="MainTreeView_SelectedItemChanged">
c# code
private void MainTreeView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var selectedTreeview = MainTreeView.ItemContainerGenerator.ContainerFromItem(((TreeView)sender).SelectedItem);
var selectedItem = ((TreeView)sender).SelectedItem;
if (selectedTreeview is TreeViewItem treeViewItem)
{
if (FindVisualChild<stackpanel>(treeViewItem as DependencyObject) is StackPanel stackPanel)
{
if (stackPanel.Children[0] is TextBox textbox)
{
textbox.Focus();
Keyboard.Focus(textbox);
e.Handled = true;
}
}
}
}