2011-07-03 8 views
1

私はWPFを学んでいますので、私に同行してください。C#WPF派手な警告を生成する方法

特定のイベントが発生した場合、私のWPFアプリケーションをユーザーの顔にフラッシュしたいと思います。

ユーザーに「通知する」最も良い方法は何ですか?私は本当にユーザーに反応させたい!

乾杯、パトリック

環境:のWindows7/64bit版/ .Net4

+1

アプリケーションがすぐにアンインストールされて破棄されるように、それらを迷惑にならないようにしますか?タスクバーのアイコンをフラッシュするか、システムトレイの近くに通知を表示します。 –

+0

/システムトレイ/通知エリア/ – Joey

+0

Matthew、ご意見ありがとうございます。通常、私はあなたと一緒です:誰がそれらを必要とする "あなたは確かですか?"質問。しかし、私のシンプルなアプリ(私が使用している)が特定の時間に物事をするように私に思い出させるべきなので、私は尋ねていました。通知領域のアイコンを点滅させるためのキーワードを教えてもらえますか? – draptik

答えて

2

ユーザーが反応させたい場合は、モーダルダイアログを開くだけで強制できます。最も軽量ののはMessageBoxです。 ShowDialogメソッドを使用して通常のモーダルウィンドウを作成することもできます。通常の外観を取り除くことによって、それらのウィンドウを「好き」にすることができます。これは、WindowStyleNoneに設定し、AllowsTransparencytrueに設定するとすべてのフレーム要素が削除されるため、ウィンドウは現在純粋なコンテンツになっています。

Popupsは、非モーダル通知に便利です。既にコンテンツのみですが、角を丸くする場合は、AllowsTransparencyをtrueに設定することも望ましい場合があります。

+0

H.B.、あなたの答えに感謝します!これは私が探していたものでした! – draptik

+0

それを聞いてうれしい、もしあなたがしたいなら、あなたは[私の答えを受け入れる]ことができます(http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。 (答えがあなたの問題を解決した場合であっても、あなたはシステムごとに何をすべきか) –

0

ベストは完全に主観的であり、多くのコンテキスト変数に依存するが、ここで私はそれをMVVMのスタイルを行う方法です。あなたのメインビューモデルで

、AlertViewModelは唯一の「メッセージ」プロパティを持っており、RelayCommandを「却下」私の場合には

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

プロパティを定義します。あなたのメインビューの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!" }); 

は、メインフォームの一番上に鮮やかな赤い警告ボックスをポップアップ表示されます。ユーザーが「Dismiss」を押すまで消えません

点滅したり、フェードイン/フェードアウトしたり、上下に跳ね返りたい場合は、データテンプレートにアニメーションを追加できます。

あなたはAlertsControl.HasItems

幸運への結合BYTアプリで残りのコントロールを無効/有効にするコンバータまたはデータを使用することができます。

+0

thrag、あなたの答えに感謝します!私はMVVMよりMVPを好むが、私はまだH.B.のアプローチと組み合わせて、あなたのアプローチ(コードスニペットのおかげで!)を使用できると思う。 – draptik

関連する問題