Click here to Skip to main content
15,919,879 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
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;
}
}
}
}
Posted
Updated 6-Aug-19 5:05am

1 solution

You're probably "setting focus", then losing it again. Bad UI "model", IMO.

Treeview, listviews, and the like are intended for "selecting" and switching "views" (where the data entry takes places).

You're fighting the tree view; not working with it.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900