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