0

ControlTemplate 内に InputBindings (Enter の KeyBinding) を持つ TextBox の WPF スタイルを作成しました。Style と InputBindings は TextBox に対して正常に機能していますが、この Style を TextBox に使用すると、TabOrder/TabStop が機能しなくなります。

これはスタイルです:

<Style x:Key="TextBoxTemplate" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter Property="OverridesDefaultStyle" Value="True" />                
    <Setter Property="FontSize" Value="16"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Setter Property="Margin" Value="5,0,5,5"/>
    <Setter Property="Width" Value="150"/>        

    <Setter Property="Template">
         <Setter.Value>
             <ControlTemplate TargetType="{x:Type TextBox}">
                 <Grid>  
                    <TextBox Text="{TemplateBinding Text}">
                         <TextBox.InputBindings>
                             <KeyBinding Command="{Binding EnterKeyCommand}" Key="Enter"/>
                         </TextBox.InputBindings>
                    </TextBox>
                 </Grid>
             </ControlTemplate>
        </Setter.Value>
     </Setter>
</Style>

TextBoxes に追加する方法:

<TextBox Text={Binding FirstName} Style="{StaticResource TextBoxTemplate}">
<TextBox Text={Binding LastName} Style="{StaticResource TextBoxTemplate}">

問題は、ControlTemplate 内で TextBox を使用していることだと思います。しかし、テンプレート内の TextBox なしで InputBindings を実行する方法がわかりません

何か考えはありますか?ありがとうフィル

4

1 に答える 1

2

テンプレートを変更して、元のテンプレートに加えて次のようにしますKeyBinding

<Style x:Key="TextBoxTemplate" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}">
    <Setter Property="OverridesDefaultStyle" Value="True" />
    <Setter Property="FontSize" Value="16"/>
    <Setter Property="VerticalAlignment" Value="Center"/>
    <Setter Property="HorizontalAlignment" Value="Left"/>
    <Setter Property="Margin" Value="5,0,5,5"/>
    <Setter Property="Width" Value="150"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type TextBox}">
                <Border x:Name="border" BorderBrush="{TemplateBinding BorderBrush}" 
                                BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" 
                                SnapsToDevicePixels="True">
                    <ScrollViewer x:Name="PART_ContentHost" Focusable="false" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden">
                        <ScrollViewer.InputBindings>
                            <KeyBinding Command="{Binding EnterKeyCommand}" Key="Enter"/>
                        </ScrollViewer.InputBindings>
                    </ScrollViewer>
                </Border>
                <ControlTemplate.Triggers>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter Property="Opacity" TargetName="border" Value="0.56"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="true">
                        <Setter Property="BorderBrush" TargetName="border" Value="#FF7EB4EA"/>
                    </Trigger>
                    <Trigger Property="IsKeyboardFocused" Value="true">
                        <Setter Property="BorderBrush" TargetName="border" Value="#FF569DE5"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
于 2019-01-04T08:15:09.720 に答える