1

編集可能なデータフォームで子ウィンドウをポップアップすると、もう一度クリックするまで灰色になります。これはバグですか?

<UserControl x:Class="DataFormChild.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:dataFormToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<Grid x:Name="LayoutRoot" Background="White">
    <dataFormToolkit:DataForm AutoEdit="True" ItemsSource="{Binding}" >
        <StackPanel>
        <dataFormToolkit:DataField>                
                <TextBox Text="{Binding Age, Mode=TwoWay}" />                
        </dataFormToolkit:DataField>
        <Button Content="LaunchPopup" Click="Button_Click"/>
        </StackPanel>
    </dataFormToolkit:DataForm>
</Grid>

namespace DataFormChild
{
   public partial class MainPage : UserControl
   {

      DataItem _data = new DataItem() { Age = 1 };
      public MainPage ()
      {

         InitializeComponent();

         ObservableCollection<DataItem> list = new ObservableCollection<DataItem>();
         list.Add( _data );
         this.DataContext = list;
      }

      private void Button_Click ( object sender, RoutedEventArgs e )
      {
         ChildWindow1 cwnd = new ChildWindow1();
         cwnd.Show();
      }
   }

   public class DataItem : IEditableObject
   {
      public int Age { get; set; }
      public void BeginEdit () { }
      public void CancelEdit () { }
      public void EndEdit () { }

   }

}
4

6 に答える 6

1

これは仕様によるものです。

焦点は子ウィンドウにあり、ユーザーはそのデータを入力したり、エラーメッセージを読んだり、そこに表示されているものを読んだりする必要があります。これは非常に重要なので、ユーザーは他に何もできません。

アクションが完了し、子ウィンドウが閉じられると、制御はメインウィンドウに戻ります。

この動作を望まない場合は、ユーザーにデータを入力させるための他のメカニズムを検討する必要があります。

于 2011-06-10T22:39:04.903 に答える
1

何が起こっているかというと、ChildWindow を表示するとフォームがコミットされます。これにより、編集モードから読み取り専用モードに移行するため、コントロールはグレー表示されます。

フォームを再度クリックすると、AutoEdit が true に設定されているため、データの編集が再開され、灰色ではなくなります。

これを解決する最も簡単な方法は、AutoCommit="False" を DataForm に追加することです。

于 2011-06-28T11:06:21.390 に答える
1

仕様によるものですが、そのChrisF動作が必要ない場合は、コントロール テンプレートを変更してChildWindow、暗くなる動作を削除できます。

ChildWindow テンプレートOverlayのコントロールを変更する必要があります

于 2011-06-11T15:02:06.370 に答える
1

SL3 アプリでも同じ問題がありますが、フォームのコミットとは関係ありません。これは、データフォームの「OK」と「キャンセル」を含むすべてのコントロールがまだ表示され、有効になっていて、グレーになっているためです。コントロールのいずれかにフォーカスを設定すると灰色のままですが、テキストボックスの値を変更するとすべてが正常に戻ります。これは、データフォームが親である場合にのみ発生し、メイン アプリが親である場合はすべて問題ありません。

于 2011-07-13T12:13:16.957 に答える
0

ソースを見ると、ChildWindow はアプリケーションの rootvisual で IsEnabled = false になります。これにより、データフォーム上で要素をオーバーレイする視覚的な状態遷移が発生します。無効な状態を離れても、要素は削除されません (不透明度は 0 に戻されます)。無効状態のビジュアルが必要ない場合、最も簡単な修正方法は、既定のテンプレートのコピーを編集し、"DisabledVisual" を表示させる無効状態の DoubleAnimation を削除することです。

于 2011-08-16T18:53:59.500 に答える
0

私はちょうど同じ問題を抱えていて、ボタンをデータフォームから取り出して解決しました

于 2012-01-20T11:42:58.783 に答える