0

У меня есть такой виджет:

<UserControl x:Class="Example.Controls.ControlPanel"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             mc:Ignorable="d" 
             d:DesignHeight="450" d:DesignWidth="800">
    <Grid>
        <StackPanel x:Name="panel" Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
            <Button Margin="0,0,30,0"/>
            <Button Margin="0,0,30,0"/>
            <Button Margin="0,0,0,0"/>
        </StackPanel>
    </Grid>
</UserControl>

Этот виджет располагается в главном окне таким образом:

<controls:ControlPanel x:Name="controlPanel" Margin="0,0,0,45" Height="140" VerticalAlignment="Bottom"/>

Мне нужно реализовать следующий функционал, который должен находиться в классе ControlPanel:

  1. Изначально виджет сдвинут вниз на свою высоту, то есть скрыт за пределами окна.
  2. Если виджет скрыт и курсор находится на нижней границе окна программы или вышел за его пределы вниз, то нужно показать виджет (плавно сдвинуть вверх на его высоту).
  3. Если виджет виден и курсор вышел за пределы виджета вверх, то нужно скрыть виджет (плавно сдвинуть вниз на его высоту).

Как из класса виджета отследить позицию курсора в окне приложения (за пределами виджета), как отследить смещение курсора на нижнюю границу окна и за нее?

Bagomot
  • 51
  • 1
    Это делается проще, чем вы думаете. Само "появление" делается так, а вот триггер (курсор в нужной области или нет) делается до безумия просто - прозрачный прямоугольник (Border или аналог), растянутый на всю ширину и с высотой 5-10 пунктов, дальше вешаете триггер на MouseOver по которому запускаете анимацию появления, все, задача решена. – EvgeniyZ Dec 08 '23 at 11:43
  • То есть мне отслеживать курсор в поле этого прямоугольника, а анимировать StackPanel? – Bagomot Dec 08 '23 at 12:08
  • Вам не надо ничего отслеживать, любой элемент WPF имеет события и свойства по типу "мышь на объекте", "мышь ушла с объекта", "совершен клик" и так далее. Вам достаточно взять что-то, что будет нужную область заполнять собой (прим.: <Border Background = "Transparent" />), далее создаете для него стиль, в котором прописываете триггер, который будет запускать анимацию "появления" (в документации хороший пример). Высчитывать что-то, отслеживать, вам не нужно. – EvgeniyZ Dec 08 '23 at 12:23

0 Answers0