Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 如何将焦点设置为内部文本框,但不显示闪烁的插入符号?_Wpf_Xaml - Fatal编程技术网

Wpf 如何将焦点设置为内部文本框,但不显示闪烁的插入符号?

Wpf 如何将焦点设置为内部文本框,但不显示闪烁的插入符号?,wpf,xaml,Wpf,Xaml,我为WPF文本框制作了这个控件模板 <Style x:Key="SearchTextBox" TargetType="TextBox"> <Setter Property="BorderThickness" Value="0" /> <Setter Property="Template"> <Setter.Value>

我为WPF文本框制作了这个控件模板

<Style x:Key="SearchTextBox" TargetType="TextBox">
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Border 
                    BorderBrush="{StaticResource Grey200Brush}" 
                    BorderThickness="1">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        
                        <glph:GlyphAwesome 
                            Grid.Column="0"
                            Glyph="search"
                            Margin="4"
                            FontFamily="{StaticResource MyFontFamily}"
                            Foreground="{StaticResource Grey200Brush}"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Left"
                            Visibility="{Binding ElementName=TextField, Path=Text, Mode=TwoWay, Converter={StaticResource InverseEmptyStringToVisibilityConverter}}"
                            FontSize="13"/>

                        <TextBox
                            Grid.Column="1"
                            BorderThickness="0"
                            Margin="4"
                            VerticalAlignment="Center"
                            FontFamily="{StaticResource MyFontFamily}"
                            Foreground="{StaticResource Blue900Brush}"
                            x:Name="TextField"
                            Text="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Text, UpdateSourceTrigger=PropertyChanged}"/>
                    </Grid>
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<TextBox 
    Name="myTextBox" 
    Text="{Binding FieldId, TargetNullValue='', UpdateSourceTrigger=PropertyChanged}" 
    Style="{StaticResource SearchTextBox}"
    MinWidth="150"
    VerticalAlignment="Center"
    Focusable="True"/>
只有用鼠标单击文本框(内部)时,插入符号才会出现

我在这里该怎么办? 以某种方式将焦点从outed转移到内部文本框,或者?
另外,如何在文本框聚焦而不是开始键入时折叠图示符?

您的模板错误。将
文本框
放在
文本框
中会让您感到奇怪
TextBox
使用
ScrollViewer
作为主机呈现其内容。这允许文本滚动。通常,内容主机可以是任何
框架元素
。它必须命名为
PART\u ContentHost

始终检查以获取WPF控件的默认样式和模板、命名零件和视觉状态。在这里,您还可以找到,并在顶部找到必须是模板一部分的强制命名元素列表

通过将内部的
文本框
替换为名为
PART\u ContentHost的
ScrollViewer
来修复模板:

<Style x:Key="SearchTextBox" TargetType="TextBox">
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Border 
                    BorderBrush="{StaticResource Grey200Brush}" 
                    BorderThickness="1">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        
                        <glph:GlyphAwesome x:Name="SearchSymbol"
                            Grid.Column="0"
                            Glyph="search"
                            Margin="4"
                            FontFamily="{StaticResource MyFontFamily}"
                            Foreground="{StaticResource Grey200Brush}"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Left"
                            FontSize="13"/>

                        <ScrollViewer x:Name="PART_ContentHost"
                                      Grid.Column="1" 
                                      Margin="0" />
                    </Grid>
                </Border>

                <ControlTemplate.Triggers>
                    <Trigger Property="IsKeyboardFocusWithin" Value="True">
                        <Setter TargetName="SearchSymbol"
                                Property="Visibilty"
                                Value="Collapsed" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

您的模板错误。将
文本框
放在
文本框
中会让您感到奇怪
TextBox
使用
ScrollViewer
作为主机呈现其内容。这允许文本滚动。通常,内容主机可以是任何
框架元素
。它必须命名为
PART\u ContentHost

始终检查以获取WPF控件的默认样式和模板、命名零件和视觉状态。在这里,您还可以找到,并在顶部找到必须是模板一部分的强制命名元素列表

通过将内部的
文本框
替换为名为
PART\u ContentHost的
ScrollViewer
来修复模板:

<Style x:Key="SearchTextBox" TargetType="TextBox">
    <Setter Property="BorderThickness" Value="0" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="TextBox">
                <Border 
                    BorderBrush="{StaticResource Grey200Brush}" 
                    BorderThickness="1">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        
                        <glph:GlyphAwesome x:Name="SearchSymbol"
                            Grid.Column="0"
                            Glyph="search"
                            Margin="4"
                            FontFamily="{StaticResource MyFontFamily}"
                            Foreground="{StaticResource Grey200Brush}"
                            VerticalAlignment="Center"
                            HorizontalAlignment="Left"
                            FontSize="13"/>

                        <ScrollViewer x:Name="PART_ContentHost"
                                      Grid.Column="1" 
                                      Margin="0" />
                    </Grid>
                </Border>

                <ControlTemplate.Triggers>
                    <Trigger Property="IsKeyboardFocusWithin" Value="True">
                        <Setter TargetName="SearchSymbol"
                                Property="Visibilty"
                                Value="Collapsed" />
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>


您采取了错误的方法。在TextBox控件模板中嵌入TextBox是不正确的。您应该改为使用Blend for Visual Studio提取文本框控件模板,然后对其进行修改以添加图标。然后,您可以使用控件模板触发器正确显示/隐藏图标。如果要在文本框具有键盘焦点时显示/隐藏图标,请使用IsKeyboardFocusWithin属性。您采取了错误的方法。在TextBox控件模板中嵌入TextBox是不正确的。您应该改为使用Blend for Visual Studio提取文本框控件模板,然后对其进行修改以添加图标。然后,您可以使用控件模板触发器正确显示/隐藏图标。如果要在文本框具有键盘焦点时显示/隐藏图标,请使用IsKeyboardFocusInside属性。