Wpf 为什么我必须按tab键两次才能使用此控件模板访问textbox?
我为一个文本框创建了一个ControlTemplate,其中包含一个标签。然而,当我尝试使用Tab来导航控件时,我必须按Tab键两次才能进入文本框字段,就好像它正在关注其中的另一个元素一样。我试着弄乱标签的焦点,但这似乎不是问题。代码如下:Wpf 为什么我必须按tab键两次才能使用此控件模板访问textbox?,wpf,xaml,textbox,controltemplate,keyboard-navigation,Wpf,Xaml,Textbox,Controltemplate,Keyboard Navigation,我为一个文本框创建了一个ControlTemplate,其中包含一个标签。然而,当我尝试使用Tab来导航控件时,我必须按Tab键两次才能进入文本框字段,就好像它正在关注其中的另一个元素一样。我试着弄乱标签的焦点,但这似乎不是问题。代码如下: <ControlTemplate x:Key="custTextbox" TargetType="{x:Type TextBox}"> <Canvas x:Name="customTextbox"> <B
<ControlTemplate x:Key="custTextbox" TargetType="{x:Type TextBox}">
<Canvas x:Name="customTextbox">
<Border CornerRadius="3, 0, 0 ,3" BorderThickness="1, 1, 0, 1"
Height="30" x:Name="brdTextboxLabel" Width="98">
<Border.BorderBrush>
<LinearGradientBrush StartPoint=".5,0" EndPoint=".5,1">
<GradientStop Color="#3C3F48" Offset=".88"/>
<GradientStop Color="#9CA1A8" Offset=".96"/>
</LinearGradientBrush>
</Border.BorderBrush>
<Border.Background>
<LinearGradientBrush StartPoint=".5, 0" EndPoint=".5, 1">
<GradientStop Color="#414447" Offset="0"/>
<GradientStop Color="#4E525B" Offset=".08"/>
</LinearGradientBrush>
</Border.Background>
<Canvas>
<Rectangle Height="24" x:Name="rectangle3" Stroke="#636369"
Width="1" Canvas.Left="96" Canvas.Top="2" />
<Label Canvas.Left="0" Padding="9,6.5,0,0" Foreground="#BABBBF"
FontWeight="Bold" Canvas.Top="0" FontSize="11"
Content="{TemplateBinding Tag}" Height="28"
x:Name="lblTextboxHeader" Width="92" />
</Canvas>
</Border>
<!-- ========================================= -->
<Border CornerRadius="0,3,3,0" BorderThickness="0,1,1,1" Canvas.Left="98"
Height="30" x:Name="brdTextbox" Width="348">
<Border.BorderBrush>
<LinearGradientBrush StartPoint=".5,0" EndPoint=".5,1">
<GradientStop Color="#3C3F48" Offset=".88"/>
<GradientStop Color="#9CA1A8" Offset=".96"/>
</LinearGradientBrush>
</Border.BorderBrush>
<Border.Background>
<LinearGradientBrush StartPoint=".5, 0" EndPoint=".5, 1">
<GradientStop Color="#414447" Offset="0"/>
<GradientStop Color="#4E525B" Offset=".08"/>
</LinearGradientBrush>
</Border.Background>
<Canvas>
<TextBox TabIndex="0" Background="Transparent" CaretBrush="#8C8CA1"
FontSize="16" Padding="4, 3, 0 ,0" BorderBrush="Transparent"
Foreground="#D4D5DA" Canvas.Left="0" Canvas.Top="-1"
Height="30" x:Name="textBox1" Width="347"/>
</Canvas>
</Border>
</Canvas>
</ControlTemplate>
抱歉,如果这是一个混乱的ControlTemplate,这是我在启动wpf/xaml时做的第一个
谢谢你抽出时间 哈!在解决另一个控件上的问题时解决了此问题 问题是,基本上,每次使用模板时,我都有两个文本框 简单的地图是:
<TextBox>
<ControlTemplate>
<Label/>
<Textbox/>
</ControlTemplate>
</TextBox>
因此,我只需将我放在窗口中的控件设置为KeyboardNavigation.IsTabStop=“false”,这样它就可以通过该文本框并转到我的ControlTemplate中的文本框。下载Snoop并对应用程序运行它。点击tab并观察它的左下角,它会告诉你什么是焦点。找出焦点后,在该元素上设置
IsTabStop
属性。我在一台商用计算机上,我不能只下载一些东西。谢谢你!当你在做的时候,找一个新的生意;)我在开玩笑,我现在正在为你检查。当这个XAML放在一个空窗口中时,文本框会聚焦在第一个选项卡上。话虽如此,XAML之外的其他东西正在获取焦点。嗯,奇怪……我还有其他控件可以获取焦点。即使是非模板文本框也可以。如果我是你,我会重新评估你的设计。外部文本框似乎没有被使用?那为什么会有呢?您是否试图创建一个类似的文本框,以便在其中输入关键字(如[wpf]),并将其呈现到标签中?基本上,我使用'Content=“{TemplateBinding Tag}”设置ControlTemplate中标签显示的内容。这可能是(阅读:可能是)一种不可靠的方式来实现我想要的。也许这作为一个用户控件会更好?404在image.buh上找不到,为我工作,尝试另一个主机:(我无法在我的工作计算机上访问imgur…不幸的是)我看到你正在尝试使用一个可重用的控件,所以用户控件或类似网格或StackPanel的东西都可以工作。您只需要有一个带有几列的网格。你没有的是一个带有标签的文本框和另一个文本框。你可以做一些事情,但这些事情可能需要研究或在另一个问题中提出。