Member 13188806 Ответов: 1

Нужно сфокусировать текстовое поле внутри элемента 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 текстовое поле)
{
текстовый.Сосредоточить();
Клавиатура.Фокус(текстовое поле);
е.Обработано = истина;
}
}
}
}

1 Ответов

Рейтинг:
0

Gerry Schmitz

Вы, вероятно, "устанавливаете фокус", а затем снова теряете его. Плохая "модель" пользовательского интерфейса, ИМО.

Treeview, listviews и им подобные предназначены для "выбора" и переключения "представлений" (где происходит ввод данных).

Вы боретесь с видом дерева, а не работаете с ним.