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

发生的事情是显示 ChildWindow 导致表单提交。这使它退出编辑模式并进入只读模式,因此控件显示为灰色。

当您再次单击表单时,因为您已将 AutoEdit 设置为 true,您将再次开始编辑数据,并且不再是灰色的。

解决此问题的最简单方法是将 AutoCommit="False" 添加到您的 DataForm。

于 2011-06-28T11:06:21.390 回答
1

我在 SL3 应用程序上遇到了同样的问题,但它与表单提交无关。我知道这一点,因为我的所有控件,包括数据表单“确定”和“取消”仍然可见并启用,只是灰色。当我将焦点放在任何控件上时,它保持灰色,但是当我更改文本框值时,一切都恢复正常。这只发生在数据表单是父级时,如果主应用程序是父级,那么一切都很好。

于 2011-07-13T12:13:16.957 回答
1

这是设计使然。

焦点在子窗口上,用户应该在上面输入数据,阅读错误消息,或者那里出现的任何内容。这非常重要,以至于用户无能为力。

一旦操作完成并且子窗口关闭,则控制权返回到主窗口。

如果您不想要这种行为,那么您应该查看其他机制来让用户输入数据。

于 2011-06-10T22:39:04.903 回答
1

正如ChrisF设计所说,但如果您不想要这种行为,那么您可以更改控制模板ChildWindow并删除变暗行为。

需要修改ChildWindow模板Overlay中的控件

于 2011-06-11T15:02:06.370 回答
0

如果您查看源代码,ChildWindow 将 IsEnabled = false 在应用程序的 rootvisual 上。这会导致数据表单上的视觉状态转换覆盖数据表单中的元素。离开禁用状态后,不会删除元素(不透明度设置回 0)。如果您不需要禁用状态视觉效果,最简单的解决方法是编辑默认模板的副本并删除导致“禁用视觉”显示的禁用状态 DoubleAnimation。

于 2011-08-16T18:53:59.500 回答
0

我刚刚遇到了同样的问题,并通过将按钮从数据表单中取出来解决了它

于 2012-01-20T11:42:58.783 回答