具有 InputBindings 的样式内的 TextBox ControlTemplate

TextBox ControlTemplate inside of a Style with InputBindings

我在 ControlTemplate 中为带有 InputBindings(Enter 键绑定)的 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>

我如何将它添加到我的文本框:

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

我认为问题在于我在 ControlTemplate 中使用了 TextBox。 但是我不知道如何在模板中没有文本框的情况下获得 运行 InputBindings

你有什么想法吗? 谢谢菲尔

修改您的模板,使其看起来像原始模板加上您的 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>