2

ユーザーが値を入力できるフィールドを持つウィンドウがありますが、メッセージボックスを表示して一部のフィールドが無効であることをユーザーに伝えると、ユーザーがメッセージボックスからウィンドウに変更できなくなります。

MessageBox を使用しているときに Window にアクセスできるようにするには、MessageBox をどのように作成すればよいですか? マルチスレッド化する必要がありますか?アプリケーションの残りの部分をロックしない MessageBox のようなオブジェクトを作成する方法はありますか?

コード:

 string unfilled = @"The following fields are mandatory and are required to continue:";
 bool invalid = false;
 foreach(Field f in _view.FormFields) {
      if(f.IsMandatory > 0 && !f.IsValid) {
           unfilled += "\n" + f.LongDisplay;
           foreach(string s in f.ErrorMessages) {
                unfilled += "\n\t" + s;
           }
           invalid = true;
      }
 }

 if(invalid) {
      MessageBox.Show(unfilled, "Invalid Submission"); <-- locks up WPF application
      return;
 }
4

3 に答える 3

4

MessageBox は、表示元のフォームに対してモーダルです。

回避策として、別の wpf フォームを常に表示できます。または、現在使用しているフォームにエラー テキストを表示することもできます。

于 2012-10-18T18:24:40.343 に答える
0

この場合、wpf フォームにテキストを表示するほうがよいようです。フローティング検証メッセージボックスを備えた UI が非常に直感的かどうかはわかりません。

さらに良いのは、wpf がすぐにサポートする検証機能を調べて、入力する必要がある必須項目を強調表示することです。

于 2012-10-18T18:34:14.817 に答える
0

マークアップの下部に別の Grid を定義し、可視性を visible に設定することで、ユーザーへのメッセージとともにグリッドを表示できます。次に、ウィンドウのマウス クリックをトラップし、メッセージを表示するグリッドが表示されている場合は、表示を非表示に設定します。以下は、ポップアップ グリッドの例です。

<Grid x:Name="MyMessageBox" Visibility="Hidden">
        <Grid Background="Black" Opacity="0.5"/>
        <Border
        MinWidth="250"
        Background="Orange" 
        BorderBrush="Black" 
        BorderThickness="1" 
        CornerRadius="0,55,0,55" 
        HorizontalAlignment="Center" 
        VerticalAlignment="Center">
            <StackPanel>
                <TextBlock Margin="5" Text="" Name="MessageText" FontWeight="Bold" FontFamily="Cambria" />
                </StackPanel>
            </StackPanel>
        </Border>
    </Grid>
于 2012-10-18T18:37:09.980 に答える