0

我在 ControlTemplate 中为带有 InputBindings(Enter 的 KeyBinding)的 TextBox 创建了 WPF 样式。Style 和 InputBindings 对我的 TextBoxes 工作正常,但如果我将这个 Style 用于我的 TextBoxes,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。但我不知道如何在模板内没有 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 回答