如何在Windows Phone 8.1中的Android中创建类似于“toast notification”的内容

时间:2015-01-27 13:53:59

标签: windows windows-phone-8 windows-phone-8.1 toast

我想创建一些类似于" toast notification"在Android手机8.1中。 我想要的是,一个要显示的文本框,指示用户发生了一些事件(例如"配对","连接丢失"等等)。但文本框应该在几秒钟后自动解除,而无需任何用户交互。 我已经通过消息框和Windows中的弹出窗口。但两者都不能满足我的需求,或者我必须使用计时器回调来自动解除它,这是不推荐的。

任何人都可以建议在Windows Phone 8.1中实现此方法

4 个答案:

答案 0 :(得分:2)

在我看来,最好的解决方案是igrali的解决方案,因为他尊重指南。

但如果你想展示Toast相同的Android:

像这样创建userControl:

<Border CornerRadius="50" Background="#CC000000" Height="80" Width="150" Margin="10">
    <TextBlock Text="{Binding Message}" Foreground="White" 
               HorizontalAlignment="Center" VerticalAlignment="Center" />
</Border>

在代码背后:

public MyUserControl1()
    {
        this.InitializeComponent();
        this.DataContext = this;
    }


    public string Message
    {
        get { return (string)GetValue(MessageProperty); }
        set { SetValue(MessageProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Message.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty MessageProperty =
        DependencyProperty.Register("Message", typeof(string), typeof(MyUserControl1), new PropertyMetadata(string.Empty));

在页面中使用此userControl:

 private MyUserControl1 toast;
    private DispatcherTimer timer = new DispatcherTimer();

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        toast = new MyUserControl1();
        toast.Message = "Message in my toast";
        toast.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom;
        toast.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center;


        timer.Interval = new TimeSpan(0, 0, 1);
        timer.Start();
        timer.Tick += timer_Tick;
        layoutRoot.Children.Add(toast);
    }

    void timer_Tick(object sender, object e)
    {
        if(toast != null)
            layoutRoot.Children.Remove(toast);

        timer.Stop();
    }

我创建了一个按钮,并触发了点击事件。

在这种情况下,我创建了我的usercontrol并添加了grid(layoutRoot)。 我在一次借调后使用DispatcherTimer删除用户控制。

[编辑] 你有一个工作基地。当然,你可以大大改善代码。

例如,创建一个定义显示时间的枚举。 您还可以创建一个故事板来运行动画。

答案 1 :(得分:2)

您可以在其中添加静态类添加。之后,从您想要显示toast的地方调用此showText()。只需传递布局根(父网格)和字符串即可显示。您可以根据需要自定义外观。

 public static void ShowToast(Grid layoutRoot, string message)
    {
        Grid grid = new Grid();
        grid.Width = 300;
        grid.Height = 60;
        grid.Background = new Windows.UI.Xaml.Media.SolidColorBrush(Colors.Transparent);
        grid.HorizontalAlignment = Windows.UI.Xaml.HorizontalAlignment.Center;
        grid.VerticalAlignment = Windows.UI.Xaml.VerticalAlignment.Bottom;
        grid.Margin = new Thickness(0, 0, 0, 30);


        TextBlock text = new TextBlock();
        text.Text = message;
        text.VerticalAlignment = VerticalAlignment.Center;
        text.HorizontalAlignment = HorizontalAlignment.Center;
        text.FontSize = 22;

        grid.Children.Add(text);

        layoutRoot.Children.Add(grid);

        DispatcherTimer timer = new DispatcherTimer();
        timer.Interval = new TimeSpan(0, 0, 3);
        timer.Tick += (sender, args) =>
        {
            layoutRoot.Children.Remove(grid);
            timer.Stop();
        };
        timer.Start();
    }

答案 2 :(得分:1)

So I used the Coding4fun ToastPrompt to tweak as per android.
In your code add the following code:


  ToastPrompt toast = new ToastPrompt();
   toast.Title = "Toast Title";
   toast.Message = "Toast Message"
   toast.MillisecondsUntilHidden = 2000; //duration for toast
   toast.Background =new SolidColorBrush(Colors.Gray);
   toast.Foreground = new SolidColorBrush(Colors.White);
   toast.IsHitTestVisible = false;
   toast.Margin = new Windows.UI.Xaml.Thickness(0,0,0,100);
   toast.HorizontalContentAlignment = HorizontalAlignment.Center;
   toast.VerticalContentAlignment = VerticalAlignment.Center;
   toast.Stretch = Stretch.Uniform;
   toast.VerticalAlignment = VerticalAlignment.Bottom;
   toast.HorizontalAlignment = HorizontalAlignment.Center;
   toast.Template = Application.Current.Resources["ToastPromptStyle"] as ControlTemplate;
   toast.Show();

在您的Styles.xaml页面或您已将样式标记为decalared的任何位置,请定义ControlTemplate。我的名字是&#34; ToastPromptStyle&#34;。

定位Toast提示。在样式页面上添加对工具包的引用。这样的事情:     的xmlns:工具箱=&#34;使用:Coding4Fun.Toolkit.Controls&#34;

<ControlTemplate x:Key="ToastPromptStyle" TargetType="toolkit:ToastPrompt">
<Border CornerRadius="15" Background="Gray">
  <TextBlock Text="{TemplateBinding Message}" Foreground="White"   FontFamily="DengXian" FontSize="20" Margin="10"/>
</Border> 
</ControlTemplate>

正如你所看到的那样,我已经设置了角半径属性,以便在边缘处给出类似于android中给出的弯曲。希望它有所帮助。

答案 3 :(得分:0)

Coding4Fun之后的ToastPrompt。

ToastPrompt toast = new ToastPrompt();
toast.Title = "Title";
toast.Message = "Message";
toast.MillisecondsUntilHidden = 4000; //dismissed after 4 seconds

toast.Completed += toast_Completed;
toast.Show();