簡體   English   中英

具有InputBindings的樣式內的TextBox ControlTemplate

[英]TextBox ControlTemplate inside of a Style with InputBindings

我已經在ControlTemplate內部為具有InputBindings(Enter的KeyBinding)的TextBox創建了WPF樣式。 Style和InputBindings對於我的TextBoxes正常工作,但是如果我對TextBoxes使用此Style,則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

你有什么主意嗎? 謝謝菲爾

修改模板,使其看起來像原始模板以及您的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>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM