Как я могу вывести мое Silverlight 5 Window на экран?

У меня есть приложение Silverlight 5 OOB. Я хочу приготовить тост. Я не хочу использовать NotificationWindows из-за ограничений.

Я пробовал создать окно S5 и вывести его на экран. [Грубо, но это только начало.] Если я использую одну кнопку в главном окне для запуска создания, а другую - для запуска анимации, это сработает. Если я помещу анимацию в первый метод, просто появится окно без анимации. Кто-нибудь знает, как я могу заставить эту работу.

Для воссоздания внутри сетки в MainPage.xaml добавьте:

<Button Content="Show" Height="23" HorizontalAlignment="Left" Margin="12,12,0,0"
        Name="show" VerticalAlignment="Top" Width="75" Click="show_Click" />
<Button Content="Move" Height="23" HorizontalAlignment="Left" Margin="12,41,0,0"
        Name="move" VerticalAlignment="Top" Width="75" Click="move_Click" />

Внутри MainPage.xaml.cs добавьте:

    private Window toastWindow;

    private void show_Click(object sender, RoutedEventArgs e)
    {
        toastWindow = new Window();
        toastWindow.Width = 280;
        toastWindow.Height = 58;
        toastWindow.Left = 975;
        toastWindow.Top = 755;
        toastWindow.WindowStyle = WindowStyle.None;
        toastWindow.WindowState = WindowState.Normal;
        toastWindow.Content = new Toast();
        toastWindow.Show();
        toastWindow.Activate();

        //for (int i = 0; i < 20; i++)
        //{
        //    toastWindow.Top = toastWindow.Top - 5;
        //    System.Threading.Thread.Sleep(25);
        //}
    }

    private void move_Click(object sender, RoutedEventArgs e)
    {
        for (int i = 0; i < 20; i++)
        {
            toastWindow.Top = toastWindow.Top - 5;
            System.Threading.Thread.Sleep(25);
        }
    }

Вам также понадобится UserControl под названием Toast (в Toast.xaml), в котором я дал LayoutRoot Grid цвет фона, чтобы он был очевиден даже через начальную панель с Width = "300" Height = "100".

На странице свойств Silverlight 5 вам потребуется включить запуск приложения из браузера, а в настройках вне браузера установить Требовать повышенного доверия при работе вне браузера.

Если вы запустите его и нажмете «Показать», вы увидите всплывающее сообщение за панелью / часами «Пуск». Если вы нажмете «Переместить», он сдвинется вверх. Если вы раскомментируете конец метода show_Click, запустите его снова и нажмите «Показать», он появится в своем окончательном положении без скольжения.

Любые идеи?

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


person SGarratt    schedule 12.07.2012    source источник


Ответы (1)


Ваш код «перемещения» в настоящее время синхронный, что означает, что он блокирует поток пользовательского интерфейса, что очень плохо.

Вместо этого вы можете использовать DispatcherTimer для создания такого эффекта.

person jv42    schedule 12.07.2012
comment
да. И использование DispatcherTimer заставило его исчезнуть. Спасибо. - person SGarratt; 12.07.2012
comment
Другим решением может быть использование VisualStateManager для анимации, хотя в вашем случае это может быть сложнее. - person jv42; 12.07.2012