Триггеры стиля, чтобы установить фокус на tekstbox не работает должным образом - PullRequest
0 голосов
/ 08 марта 2020

Я хочу установить фокус клавиатуры на TextBox с помощью триггера IsMouseOver родительской StackPanel.
TextBox получает фокус, и курсор становится видимым, но как только я отодвигаю мышь от StackPanel, TextBox теряет фокус.

 <Style x:Key="TextboxStyle"  TargetType="TextBox">
        <Setter Property="Foreground" Value="White" />
        <Setter Property="Background" Value="Black" />                  
        <Setter Property="FontSize" Value="26" />
        <Setter Property="TextAlignment" Value="Center"/>
        <Setter Property="BorderBrush" Value="#FF2952CD"/>
        <Setter Property="CaretBrush" Value="Black"/>
        <Setter Property="Background" Value="#FF0D274A"/>            
        <Style.Triggers>
            <DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}}" Value="True">
                <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}" />
                <Setter Property="FocusManager.IsFocusScope" Value="True" /> 
            </DataTrigger>
            <Trigger Property="IsFocused" Value="True">
                <Setter Property="Background" Value="Goldenrod"/>
                <Setter Property="Foreground" Value="Black"/>                    
            </Trigger>
            <Trigger Property="IsFocused" Value="False">
                <Setter Property="Background" Value="#FF0D274A"/>
                <Setter Property="Foreground" Value="White"/>
            </Trigger>
        </Style.Triggers>
    </Style>

Я перепробовал много вариантов, но не могу заставить его работать.

Ответы [ 2 ]

0 голосов
/ 08 марта 2020

Я нашел решение. Я добавил дополнительные

<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"/> в <Trigger Property="IsFocused" Value="True">. Сейчас это работает.

0 голосов
/ 08 марта 2020

Я не знаю, почему вы используете такой код:

<DataTrigger Binding="{Binding IsMouseOver, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type StackPanel}}}" Value="True">
    <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}" />
    <Setter Property="FocusManager.IsFocusScope" Value="True" /> 
</DataTrigger>

Я думаю, вы можете просто переписать его так:

<Trigger Property="IsMouseOver" Value="True">
    <Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}" />
    <Setter Property="FocusManager.IsFocusScope" Value="True" /> 
</Trigger>

Я не знаю, если это работает или нет, но если нет, я думаю, что вы можете добавить к нему событие MouseOver и сделать свой код в C#.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...