c#WPF如何产生华而不实的警告

本文关键字:警告 华而不实 何产生 c#WPF | 更新日期: 2023-09-27 18:01:06

我正在学习WPF,请耐心等待。

如果某个事件被触发,我想让我的WPF应用程序在用户面前闪现。

"通知"用户的最佳方式是什么?我真的希望用户做出反应!

干杯,帕特里克

环境:Windows7/64bit/.Net4

c#WPF如何产生华而不实的警告

如果你想让用户做出反应,你可以通过打开一个模态对话来迫使他们做出反应。其中最轻量级的是MessageBox。您也可以使用它们的ShowDialog方法创建正常模式窗口,您可以通过去掉它们的正常外观来使这些窗口变得随心所欲。这是通过将WindowStyle设置为None,将AllowsTransparency设置为true来实现的,这将删除所有帧元素,因此窗口现在是纯内容。

Popups对于非模态通知很方便,而且它们已经只是内容,但如果您想要圆角,也可能需要将其AllowsTransparency设置为true。

Best完全是主观的,依赖于许多上下文变量,但以下是我如何做到MVVM风格。

在主视图模型中,定义属性

pubic ObservableCollection<AlertViewModel"> Alerts { get; private set; }

在我的情况下,AlertViewModel只有一个"Message"属性和一个"Dismiss"RelayCommand。

在主视图的XAML中添加

<Grid>
    <all of my other other view controls>
    <ItemsControl x:Name="AlertsControl" Opacity="50" ItemsSource="{Binding Alerts}"/>
</Grid>

确保它是主视图主容器中的最后一个项目。这确保了它具有最高的z顺序,并将显示在所有其他控件之上。

这是这个视图模型的数据模板

<DataTemplate DataType="{x:Type vm:AlertViewModel}">
   <Border CornerRadius="10" Margin="3" Background="Red">
     <Grid>
       <Grid.ColumnDefinitions>
         <ColumnDefinition Width="75"></ColumnDefinition>
         <ColumnDefinition></ColumnDefinition>
       </Grid.ColumnDefinitions>
       <Button Margin="10" Grid.Column="0" 
               Command="{Binding ElementName=theWindow, Path=DataContext.DismissAlarmCommand}" 
               CommandParameter="{Binding}">Dismiss</Button>
       <TextBlock  Foreground="White" FontWeight="ExtraBold" Grid.Column="1" 
               Text="{Binding Message}"  FontSize="20" 
               VerticalAlignment="Center" HorizontalAlignment="Left"></TextBlock>
     </Grid>
   </Border>
</DataTemplate>

现在,

Alerts.Add( new AlertViewModel() { Message = "Danger Will Robinson! Danger!" } );

将在主窗体的顶部弹出一个亮红色的警告框。直到用户按下"解除",它才会消失

如果希望它闪烁、淡入淡出或上下反弹,可以在数据模板中添加动画。

您可以使用转换器或数据通过绑定到AlertsControl.HasItems 来启用/禁用应用程序中的其余控件

祝你好运。