0

我有一个 Silverlight 5 OOB 应用程序。我想创建“吐司”。由于限制,我不想使用 NotificationWindows。

我尝试创建一个 S5 窗口并将其滑到屏幕上。[粗略,但这是一个开始。]如果我在主窗口中使用一个按钮来触发创建,另一个按钮来触发动画,它就可以工作。如果我将动画放入第一种方法中,则窗口只会出现,没有动画。有谁知道我怎样才能使这项工作。

要重新创建,请在 MainPage.xaml 的 Grid 中添加:

<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);
        }
    }

您还需要一个名为 Toast 的用户控件(在 Toast.xaml 中),我在其中为 LayoutRoot Grid 提供了背景颜色,这样即使通过开始栏,其 Width="300" Height="100" 也很明显。

在 Silverlight 5 属性页面上,您需要启用在浏览器外运行的应用程序,并在浏览器外设置设置在浏览器外运行时需要提升信任。

如果您运行它并单击“显示”,您将看到“开始”栏/时钟区域后面的吐司。如果单击“移动”,它会向上滑动。如果您取消注释 show_Click 方法的末尾并再次运行它并单击 Show,它将出现在其最终位置而没有任何滑动。

有任何想法吗?

PS 最终,我希望能够在任何时候在屏幕上拥有多个具有独立寿命的“切片”。

4

1 回答 1

1

您的“移动”代码当前是同步的,这意味着它会阻塞 UI 线程,这是非常非常糟糕的。

您可以使用 aDispatcherTimer来代替这种效果。

于 2012-07-12T15:23:23.167 回答