Фокусное изображение не работает впервые в текстовом поле - PullRequest
1 голос
/ 13 марта 2012

Я хочу показать фокусное изображение вокруг текстового поля, когда оно получило фокус. поэтому я создаю следующий стиль

<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 file я использовал этот стиль следующим образом

<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}"/>

но проблема в том, что он не работает во время загрузки. Когда окно загружается, то изначально фокус находится на этом текстовом поле, и в это время оно не показывает изображение. Однако когда я перехожу к другому текстовому полю (и другому элементу управления), тогда оно показывает фокусное изображение. и, наконец, когда я фокусируюсь, возвращаюсь к этому текстовому полю, тогда оно отображает фокусное изображение

, поэтому проблема заключается в том, что он не показывает фокусное изображение в первый раз при загрузке окна. Пожалуйста, подскажите, где я не прав.

1 Ответ

0 голосов
/ 13 марта 2012

Учтите, что FocusVisualStyle применяется к элементу управления только при фокусировке с помощью клавиатуры (клавиша TAB).

Это отличается от логического фокуса, который вы получаете, например, используя

 Control.SetFocus()

Дляобзор Focus см.

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

Возможное решение вашей проблемы - работа с DependencyProperty IsFocused использовать стиль вместо 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" />

Надеюсь, это хепс

...