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 を使用して、FocusVisualStyle の代わりに Style を使用することです。

<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 に答える