c# - C# Snackbar 作为对话框
问题描述
我想从任何线程中使用 Snackbar。我宣布我的 Snackbar 就像我应该她的那样; https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/wiki/Snackbar Wiki 说我只能从 Dispatcher 线程访问 Snackbar,但我该如何实现呢?
用户控件 xaml;
<materialDesign:DialogHost SnackbarMessageQueue="{Binding ElementName=MySnackbar, Path=MessageQueue}" Identifier="DialogSnackbar">
<Grid>
<!-- app content here -->
<materialDesign:Snackbar x:Name="MySnackbar" MessageQueue="{materialDesign:MessageQueue}" />
</Grid>
</materialDesign:DialogHost>
显示一个对话框,但我也想传递一条消息;来自https://github.com/MaterialDesignInXAML/MaterialDesignInXamlToolkit/wiki/Dialogs的实现
public static async void ShowDialog()
{
var result = await DialogHost.Show("test", "DialogSnackbar", ExtendedOpenedEventHandler, ExtendedClosingEventHandler);
}
private static void ExtendedOpenedEventHandler(object sender, DialogOpenedEventArgs eventargs)
{
}
private static void ExtendedClosingEventHandler(object sender, DialogClosingEventArgs eventArgs)
{
}
当前消息的显示真的很奇怪
解决方案
一切似乎都适合我。
在您的ShowDialog()
方法中,您只传递一个字符串"test"
作为您的内容,DialogHost
并且您没有定义 a DataTemplate
inDialogHost.DialogContentTemplate
或 a DataTemplateSelector
in DialogHost.DialogContentTemplateSelector
。因此ContentControl
,当没有ContentTemplate
或ContentTemplateSelector
未定义并且您不直接将 XAML 元素传递为Content
. 这导致TextBlock
为您的字符串绑定到其Text
属性的对话框内容创建一个元素。这正是你的照片所显示的。
因此,要获得与图片显示的结果不同的结果,您需要直接传递要在对话框中显示的 XAML 元素(带有根容器元素和对话框所需的所有按钮)或在 XAML 中为您定义一个DataTemplate
或, 如果你想在 MVVM 场景中使用它。DataTemplateSelector
DialogHost
如果您需要提示如何实现此功能,请查看 repo 中的此示例。
推荐阅读
- python - 为什么 Django 将 url 重定向到不需要的页面
- node.js - Angular 不会运行我的 ng serve - Sass Loader 错误
- google-apps-script - 如何删除包含子字符串或为空的列?
- javascript - 重定向到页面而不是操作表单地址
- git - git:什么命令搜索所有远程分支以查找对给定文件的更改
- python-3.x - 导入名称中有空格的文件
- javascript - 创建用于在打字稿中获取文本的 cypress 自定义命令
- javascript - 在页面加载期间加载任意资源并显示加载指示器
- powershell - 如何在软件列表代码的输出中显示计算机名称
- r - R:在用户定义的 Fn 中,我可以合并延迟命令,可能带有用户输入吗?