私のWPFアプリには、ユーザーがボタンをクリックしたときにアクティブになる特定の時間のかかるアクションがあります。私がやりたいのは、プロセスがバックグラウンドで進行していることを示すために、ユーザーに待機カーソルのようなモーダルボックスを表示することです。これを達成するには、どのような種類のコントロールが必要ですか?
2 に答える
ここではあまり見ていません。アプリケーションをどのように設計したかはわかりませんが、私自身のために、クラスNavPage
を拡張し、型とイベントUserControl
のプロパティを持つクラスを作成しました。Modal
NavPage
Close
つまり、基本的に私NavPage
のコントロールでは、他のコントロールをその中のモーダルとしてホストできますNavPag
。Close関数は、ページを閉じるだけです。
NavPage
テンプレートがコントロールを探す方法は次のとおりです。
<ControlTemplate x:Key="Fx_NavPage_ControlTemplate" TargetType="{x:Type fx:NavPage}">
<Grid>
<Border x:Name="TheContainer" CornerRadius="{TemplateBinding CornerRadius}" BorderThickness="{TemplateBinding BorderThickness}" BorderBrush="{TemplateBinding BorderBrush}" Background="{TemplateBinding Background}">
<ContentControl Content="{TemplateBinding Content}" />
</Border>
<Border x:Name="TheCover" CornerRadius="{TemplateBinding CornerRadius}" Background="#20000000" Visibility="Collapsed" />
<ContentControl x:Name="TheModal" Content="{TemplateBinding Modal}" Visibility="Collapsed" />
</Grid>
<ControlTemplate.Triggers>
<DataTrigger Binding="{Binding Modal, RelativeSource={x:Static RelativeSource.Self}, Converter={StaticResource IsNullConverter}}" Value="False">
<Setter TargetName="TheCover" Property="Visibility" Value="Visible" />
<Setter TargetName="TheModal" Property="Visibility" Value="Visible" />
</DataTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
だから基本的に私はただ、と別のGrid
を持っています。次に、のプロパティの値をチェックするaがあり、null以外の場合は、TheCoverとTheModalの可視性をvisibleに変更します。カバーは、ユーザーがメインのNavPageのコントロールをクリックするのを防ぐ半透明のボーダーコントロールです。ContentControl (TheContainer)
Border (TheCover)
ContentControl (TheModal)
DataTrigger
Modal
NavPage
これがお役に立てば幸いです。または、上記の誰かが提案したBusyIndicatorを使用するだけでよいのですが、私自身は使用したことがないので、そこに入力することはできません。この方法でサポートが必要な場合は、コードを追加してください。
ビジーインジケーターを確認してください