【问题标题】:Textbox focus does not work when focus by mouseclick wpf通过 mouseclick wpf 获得焦点时,文本框焦点不起作用
【发布时间】:2013-05-21 10:41:51
【问题描述】:

当我用鼠标单击文本框时,焦点不会显示。当我通过键盘进入文本框时,会显示焦点。我正在尝试下面的代码。所以请任何人建议我如何解决这个问题。

 <Style x:Key="TextBoxFocusVisualStyle" >
     <Setter Property="Control.Template">
          <Setter.Value>
               <ControlTemplate>
                        <Image Source="/Mit;component/Resources/txtFocus.png"  Stretch="Fill"  Margin="-8,-6,-8,-6"/>
               </ControlTemplate>
          </Setter.Value>
     </Setter>
 </Style>

<TextBox  Grid.Column="2" Height="44" Margin="20,48,0,0" Name="txtEmailId" VerticalAlignment="Top" KeyboardNavigation.TabIndex="2" MaxWidth="400" HorizontalAlignment="Left" Width="350" Text=""  FocusVisualStyle="{DynamicResource TextBoxFocusVisualStyle}" VerticalContentAlignment="Center" FontWeight="SemiBold" FontSize="18" ContextMenu="{x:Null}" />

@hattenn 回答后我也尝试了以下代码:

<Application x:Class="WpfApplication1.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             StartupUri="MainWindow.xaml">
    <Application.Resources>



        <Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}">
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="True">
                    <Setter Property="Background">
                        <Setter.Value>
                            <VisualBrush>
                                <VisualBrush.Visual>
                                    <Grid>
                                        <Image Source="/WpfApplication1;component/Resources/txtFocus.png"  Stretch="Fill"  Margin="-8,-6,-8,-6"/>
                                    </Grid>
                                </VisualBrush.Visual>
                            </VisualBrush>
                        </Setter.Value>
                    </Setter>
                </Trigger>
            </Style.Triggers>
        </Style>


    </Application.Resources>

<TextBox Height="23" Name="textBox1" Width="120" Focusable="True" FocusVisualStyle="{DynamicResource TextBoxStyle}"/>

但这对我不起作用。没啥事儿。请建议。 谢谢

【问题讨论】:

    标签: wpf c#-4.0 textbox wpf-controls focus


    【解决方案1】:

    FocusVisualStyle 仅用于键盘焦点,您可以在这里查看:

    http://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.focusvisualstyle.aspx

    对于一般焦点,您可以使用IsFocused 属性,更多信息如下:

    http://msdn.microsoft.com/en-us/library/system.windows.uielement.isfocused.aspx

    例如,您可以尝试这样的操作:

    <Style x:Key="TextBoxStyle" TargetType="{x:Type TextBox}">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Background">
                    <Setter.Value>
                        <VisualBrush>
                            <VisualBrush.Visual>
                                <Grid>
                                    <Image Source="/Mit;component/Resources/txtFocus.png"  Stretch="Fill"  Margin="-8,-6,-8,-6"/>
                                </Grid>
                            </VisualBrush.Visual>
                        </VisualBrush>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>
    

    【讨论】:

    • 我试过这个。但它不适合我。没有错误,但没有任何影响。有什么想法吗?
    • 我试过了,效果很好。几个想法:1)还有其他影响TextBox的风格吗? 2)您是否使用正确的密钥名称?在您的示例中,您的密钥名称为TextBoxFocusVisualStyle,在此示例中,密钥名称为TextBoxStyle。看看这些,但这个例子肯定是有效的,你的代码中可能有一些东西干扰了这种风格。
    • 正如我已经写过的,你要找的不是FocusVisualStyle,而是我回答的第一句话。您正在设置仅适用于键盘焦点FocusVisualStyle。您应该设置文本框的样式,当您的文本框的IsFocused 属性设置为true 时,它具有更改背景的触发器,这在键盘聚焦或鼠标聚焦时都会发生。简单来说,你需要这样做:&lt;TextBox Height="23" Name="textBox1" Width="120" Focusable="True" Style="{DynamicResource TextBoxStyle}"/&gt;
    • 我已经尝试过该样式,但是当使用样式属性时,即使我设置了 background=white 并且光标在文本框中不可见,也不显示文本的背景。请建议。类似问题:stackoverflow.com/questions/9680343/…
    • 那么问题很明显,你不能设置两次背景。您将背景设置为图像,您不能同时将其设置为白色。做你想做的事情的一种方法是创建一个从TextBox 派生的自定义控件,它将有一个单独的依赖属性,其名称类似于ImageSource 和一个Image 在它的模板内。因此,您可以将Background 设置为白色,并将触发器中的ImageSource 设置为您想要的任何图像。
    【解决方案2】:

    只需将样式添加到文本框:

    position:relative;
    

    【讨论】:

    • 去拿考古徽章?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多