ChildWindow заставляет мою DataForm выделяться серым цветом - PullRequest
1 голос
/ 11 июня 2011

Если я открою дочернее окно в моей редактируемой форме данных, оно будет серым, пока вы снова не щелкните по нему. Это ошибка?

<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 () { }

   }

}

Ответы [ 6 ]

1 голос
/ 13 июля 2011

У меня та же проблема с приложением SL3, но оно не имеет ничего общего с фиксацией формы.Я знаю это, потому что все мои элементы управления, включая форму данных «ОК» и «Отмена», все еще видны и включены, только серые.Он остается серым, когда я устанавливаю фокус на любом из элементов управления, но когда я изменяю значение текстового поля, все возвращается в нормальное состояние.Это происходит только в том случае, если форма данных является родительской, если основное приложение является родительским, тогда все в порядке.

1 голос
/ 28 июня 2011

Что происходит, так это то, что показ ChildWindow вызывает фиксацию формы. Это выводит его из режима редактирования и в режим только для чтения, и, следовательно, элементы управления отображаются серым цветом.

При повторном нажатии на форму, поскольку для AutoEdit установлено значение true, вы снова начинаете редактировать данные, и они больше не отображаются серым цветом.

Самый простой способ решить эту проблему - добавить AutoCommit = "False" в вашу DataForm.

1 голос
/ 11 июня 2011

Как сказал ChrisF, это не совсем так, но если вы не хотите этого поведения, вы можете изменить шаблон управления на ChildWindow и убрать поведение затемнения.

Вам необходимо изменить элемент управления Overlay в шаблоне ChildWindow

1 голос
/ 11 июня 2011

Это по замыслу.

Основное внимание уделяется дочернему окну, и пользователь должен вводить данные об этом, читать сообщение об ошибке или все, что там представлено. Это так важно, что пользователь не может больше ничего делать.

После завершения действия и закрытия дочернего окна управление возвращается в главное окно.

Если вы не хотите такого поведения, вам следует рассмотреть другие механизмы, позволяющие пользователю вводить данные.

0 голосов
/ 20 января 2012

У меня была та же проблема, и я решил ее, убрав кнопки из формы данных

0 голосов
/ 16 августа 2011

Если вы посмотрите на источник, ChildWindow будет IsEnabled = false в корневом приложении.Это вызывает визуальный переход состояния в форме данных, который перекрывает элемент через форму данных.После выхода из отключенного состояния элемент не удаляется (непрозрачность возвращается в 0).Если вам не нужен визуальный вид отключенного состояния, самое простое решение - отредактировать копию шаблона по умолчанию и удалить DoubleAnimation отключенного состояния, в результате чего отображается «DisabledVisual».

...