0

この例をhttp://www.munna.shatkotha.com/blog/post/2008/10/26/Light-box-effect-with-WPF.aspxから機能させようとしています

ただし、以下の「プロセス」の名前空間または構文を正しく取得できないようです。

<Border x:Name="panelDialog" Visibility="Collapsed">
<Grid>
<Border Background="Black" Opacity="0.49"></Border>
<!--While Xmal Content of the dialog will go here-->
</Grid>
</Border>

ブログの投稿は続けて言います.....

ダイアログを非表示および表示するための2つの関数を配置するだけです。トータルコードは以下のとおりです。以下のコードでは、ライトボックス効果のあるロード画面を表示しました。モーダルダイアログを表示するときは、待機画面の表示と非表示のメソッドを呼び出すだけです。CPU拡張ジョブをバックグラウンドスレッドに送信し、ディスパッチャーを使用してバックグラウンドスレッドにいる間にUIを更新するのは良いことです。

<Page x:Class="Home">
<Grid>
<ScrollViewer HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto">
<!--All the contents will go here-->
</ScrollViewer>
<Border x:Name="panelLoading" Visibility="Collapsed">
<Grid>
<Border Background="Black" Opacity="0.49"></Border>
<local:TMEWaitScreen></local:TMEWaitScreen>
</Grid>
</Border>
</Grid>
</Page>

これがコードビハインドです

#region About Wait Screen
/// <summary>
/// Show wait screen before a web request
/// </summary>
public void ShowWaitScreen()
{
Process del = new Process(ShowWaitScreenUI);
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, del);
}
private void ShowWaitScreenUI()
{
panelLoading.Visibility = Visibility.Visible;
}
/// <summary>
/// Hide a wait screen after a web request
/// </summary>
public void HideWaitScreen()
{
Process del = new Process(HideWaitScreenUI);
Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Normal, del);
}
private void HideWaitScreenUI()
{
panelLoading.Visibility = Visibility.Collapsed;
}
#endregion

私は特にこの行に問題があります:

Process del = new Process(ShowWaitScreenUI);

私が見つけることができる唯一のプロセスはSystem.Diagnosticsにあり、引数を取りません。私がオフから学ぼうとしているブログ投稿ですか、それとも私は間違った場所にいますか?

4

2 に答える 2

2

ブログを書いた人は、Process という名前のカスタム デリゲートを定義するのを忘れていたようです (少し変わった名前です)。

private delegate void Process();

定義された状態でコンパイルする必要があります。

でも、こういう名前の方が好きです。

private delegate void HideWaitScreenHandler();
private delegate void ShowWaitScreenHandler();

実際には、これをリファクタリングしてよりシンプルにすることができます。

private delegate void ShowWaitScreenUIHandler(bool show);

void ShowWaitScreenUIThreaded(bool show)
{
    Process del = new ShowWaitScreenHandler(OnShowWaitScreenUI);
    Dispatcher.Invoke(DispatcherPriority.Normal, del, show);
}

void OnShowWaitScreenUI(bool show)
{
    panelLoading.Visibility = show ? Visibility.Visible : Visibility.Collapsed;
}
于 2008-12-05T17:35:14.380 に答える
1

タイプミス: Process と ShowWaitScreenHandler を ShowWaitScreenUIHandler に変更する必要があります。

DispatcherPriority には using が必要です。DispatcherPriority を右クリックし、[解決] を選択します。

于 2008-12-05T17:53:55.170 に答える