Фокус с вкладками не работает с шаблоном элемента управления, который обертывает элемент управления - PullRequest
0 голосов
/ 22 января 2019

Я пробовал все виды связывания с шаблоном и тому подобное, чтобы заставить это работать, но если я использую этот стиль в элементе управления, внутренний элемент управления textbox не показывает фокус.

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

Теперь, введя правильное поле, обновляется текст внутри.Если щелкнуть по нему, отобразятся выделенная рамка и курсор ввода, но вкладка в него не появится.

<Style x:Key="Special" TargetType="{x:Type TextBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <DockPanel
                    LastChildFill="True"
                    Visibility="Visible">
                    <Border
                        Name="PART_UnitContainer"
                        DockPanel.Dock="Right"
                        Visibility="Collapsed">
                        <Label
                            Content="ft"
                            Style="{DynamicResource UnitLabel}"
                        />
                    </Border>
                    <TextBox Name="PART_Control"  Text="{Binding Text, RelativeSource={RelativeSource TemplatedParent}}"/>
                </DockPanel>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsFocused" Value="True">
                        <Setter TargetName="PART_UnitContainer" Property="Visibility" Value="Visible"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

1 Ответ

0 голосов
/ 22 января 2019

Изначально я установил весь элемент управления как отсутствие табуляции, а внутренний - с табуляцией, но, очевидно, вам также нужно настроить навигацию по вкладкам, чтобы продолжить. Я не сделал, когда я пытался играть с навигацией, поэтому я пропустил этот параметр.

<Style x:Key="Special" TargetType="{x:Type TextBox}">
    <Setter Property="KeyboardNavigation.TabNavigation" Value="Continue"/>
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="Template">
        <ControlTemplate>
...
            <Text IsTabStop="True" Name="PART_Control" ...
...
        </ControlTemplate>
    </Setter>
</Style>

Однако этот маленький трюк не работает для Shift-Tab из редактируемого комбинированного списка. Я уточню ответ, если выясню.

Для комбинированных списков вы должны сделать это по-другому. Вы не устанавливаете TabNavigation на «Продолжить» и не устанавливаете IsTabStop для внутреннего выпадающего списка в «true».

См

<Style x:Key="Special" TargetType="{x:Type ComboBox}">
    <Setter Property="IsTabStop" Value="False"/>
    <Setter Property="Template">
        <ControlTemplate>
...
            <ComboBox Name="PART_Control" ...
...
        </ControlTemplate>
    </Setter>
</Style>
...