1

我想在获得焦点时在文本框周围显示焦点图像。所以我创造了以下风格

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

在窗口 xaml 文件中,我使用了这种样式如下

<TextBox  Grid.Column="1" Height="34" Margin="186,48,0,0" Name="txtEmailId" VerticalAlignment="Top" KeyboardNavigation.TabIndex="0" MaxWidth="293" HorizontalAlignment="Left" Width="293" Text="" FocusVisualStyle="{DynamicResource TextBoxFocusVisualStyle}"/>

但问题是它在加载过程中不起作用。当窗口加载时,最初焦点在该文本框上,当时它不显示图像。但是,当我导航到其他文本框(和其他控件)时,它会显示焦点图像。最后,当我将焦点返回到该文本框时,它会显示焦点图像

所以问题是它在加载窗口时第一次没有显示焦点图像。请提出我错的地方。

4

1 回答 1

0

考虑 FocusVisualStyle 仅在通过键盘(TAB 键)聚焦时才应用于控件。

这与您获得的逻辑焦点不同,例如使用

 Control.SetFocus()

有关 Focus 的概述,请查看

http://msdn.microsoft.com/en-us/library/aa969768.aspx

您的问题的一个可能的解决方法是使用 DependencyProperty IsFocused 使用 Style 而不是 FocusVisualStyle

<Style x:Key="TextBoxStyle" TargetType="{x:Type Control}">
        <Style.Triggers>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Control.Template">
                    <Setter.Value>
                        <ControlTemplate>
                            <Image  Stretch="Fill"  Margin="-8,-6,-8,-6" Source="/WPFApp;component/Resources/txtFocus.png" />
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Trigger>
        </Style.Triggers>
    </Style>

然后在主窗口中

<TextBox  Grid.Column="1" Height="34" Margin="186,48,0,0" Name="txtEmailId" 
     VerticalAlignment="Top" KeyboardNavigation.TabIndex="0" MaxWidth="293" 
                  HorizontalAlignment="Left" Width="293" Text="" 
                  Style="{DynamicResource TextBoxFocusVisualStyle}" Background="White" />

希望这个问题

于 2012-03-13T11:20:47.073 回答