Я хочу установить фокус клавиатуры на 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>

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

0
GrooverFromHolland 8 Мар 2020 в 19:33

2 ответа

Лучший ответ

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

<Setter Property="FocusManager.FocusedElement" Value="{Binding RelativeSource={RelativeSource Self}}"/> дюйм <Trigger Property="IsFocused" Value="True">. Теперь работает.

0
GrooverFromHolland 8 Мар 2020 в 18:46

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

<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 #.

0
FeiShengWu 8 Мар 2020 в 17:18