Порядок табуляции и индекс в WPF с использованием шаблона MVVM - PullRequest
0 голосов
/ 07 сентября 2010

У меня проблема с вкладками элементов управления в приложении WPF с использованием шаблона MVVM. У меня есть следующий XAML, который определяет древовидную структуру

<Grid Background="Transparent" Margin="10">
    <TreeView ItemsSource="{Binding FirstLevelNavigableViewModels}" Background="Transparent" 
              HorizontalContentAlignment="Stretch"
              HorizontalAlignment="Stretch"
              BorderThickness="0"
              ItemContainerStyle="{StaticResource TreeViewItemStyle1}">
        <TreeView.Resources>
            <HierarchicalDataTemplate DataType="{x:Type ViewModel:VendorViewModel}" ItemsSource="{Binding Children}">
                <View:VendorView HorizontalContentAlignment="Stretch" />
            </HierarchicalDataTemplate>

            <DataTemplate DataType="{x:Type ViewModel:ProductViewModel}">
                <View:ProductView HorizontalContentAlignment="Stretch" />
            </DataTemplate>
        </TreeView.Resources>
    </TreeView>
</Grid>

Когда загружено древовидное представление, XAML для «ProductView» выглядит следующим образом

<Border Margin="0,2,2,2" CornerRadius="3" Background="#3FC7B299" DockPanel.Dock="Right" HorizontalAlignment="Right" Width="109">
    <StackPanel Orientation="Vertical" Margin="6,4">
        <DockPanel>
            <TextBlock  DockPanel.Dock="Left" FontFamily="Segoe" FontSize="10" FontWeight="Medium"
                        Foreground="Black" Opacity="0.75" 
                        Text="CALC. REG. PRICE"></TextBlock>
            <Button Width="10" Height="10" Background="Transparent" BorderBrush="Transparent" BorderThickness="0" Padding="-4" Margin="0" Command="{Binding UserDefinedRetailPriceCommand}" Visibility="{Binding UserDefinedRetailPriceButtonView}">
                <Image Width="10" Height="10" Source="/Arhaus.Pricing.Client;component/Styles/Images/error.png"></Image>
            </Button>
        </DockPanel>
        <TextBox    FontFamily="Segoe" FontSize="16" FontWeight="Medium" KeyboardNavigation.IsTabStop="True" KeyboardNavigation.TabIndex="{Binding RegularPriceTabIndex}"
                    Foreground="Black" Opacity="0.9" KeyboardNavigation.TabNavigation="Continue"
                    ebf:LostFocusBehaviour.LostFocusCommand = "{Binding LostFocusSugg}"
                    Text="{Binding NewSuggestedRetailPrice,Converter={StaticResource FormattingConverter}, ConverterParameter=' \{0:C\}', Mode=TwoWay, UpdateSourceTrigger=LostFocus}" Background="#FFE6DED3" BorderBrush="#FFE6DED3" DataContext="{Binding StringFormat=\{0:c\}, NotifyOnValidationError=True}" Padding="0" TabIndex="1"></TextBox>
    </StackPanel>
</Border>

У меня есть индекс табуляции, связанный с целым числом, которое постоянно увеличивается и связывается по мере загрузки древовидного представления (т.е. у меня он настроен как индекс табуляции 1, 2, 3 и т. Д. При загрузке каждой последующей модели).

Я бы хотел иметь возможность нажать на вкладку и перейти к следующему текстовому полю в древовидной структуре, но когда я нажимаю клавишу TAB, ничего не происходит. Я не уверен, правильно ли настроен вкладок, но я очень новичок в WPF и не знаю, где и как установить вкладки, чтобы он работал. Я привык к WinForms, где вы просто устанавливаете индекс вкладки и идете оттуда.

Спасибо за вашу помощь, я прошу прощения за большой блок кода.

1 Ответ

1 голос
/ 07 сентября 2010

У меня нет готового решения, но некоторые мысли, которые могут помочь:

Я не знаю, что возвращает RegularPriceTabIndex, но, вероятно, оно начинается для каждого нового TreeViewItem с тем же индексом?Один и тот же индекс табуляции дается затем несколько раз из-за многократного использования ProductView.Возможно, это приводит к проблеме.Вы можете попробовать установить FocusManager.IsFocusScope = "true" для ProductView.Может быть, это поможет.

Попробуйте также установить Control.IsTabStop = "true" в TextBox.

...