Как я могу сделать так, чтобы мой userControl исчез при проверке? - PullRequest
0 голосов
/ 17 августа 2011

Я следую некоторым инструкциям отсюда:

Возвращаемое значение окна WPF

Я показываю пользовательский элемент управления в моем окне. Пользовательский элемент управления содержит несколько элементов управления, когда проверяется (я имею в виду, пользователь ввел все данные), мне нужно показать другой пользовательский элемент управления.

Я использую контейнер как контейнер.

1 Ответ

1 голос
/ 17 августа 2011

Вот способ сделать это.Я не знаю, что это лучший способ, но я также не знаю, насколько хорош этот способ разработки пользовательского интерфейса.Например, если мой контроль исчезает, когда я помещаю в него действительные данные, как мне вернуть их обратно, если я понимаю, что допустил ошибку?Есть причина, по которой мастера имеют кнопку «Назад».

Сначала создайте класс модели базового представления, который предоставляет логическое свойство IsValid.(В моем примере я называю это ValidatingViewModelBase.) Каждое из ваших представлений будет использовать модель представления, производную от этого класса.В каждой модели представления после того, как все свойства являются действительными, установите для IsValid значение true.

Далее создайте пользовательский элемент управления для каждой модели представления, как это делается в любом приложении MVVM.Пользовательский интерфейс будет иметь больше смысла, если они имеют одинаковый размер.

Теперь создайте модель представления, которая представляет экземпляры этих моделей представления в виде свойств (в моем примере они называются Page1,Page2 и т. Д.) И создайте привязанное к нему представление:

<Grid>
   <Grid.Resources>
      <Style x:Key="{x:Type ValidatingViewModelBase}"> 
         <Setter Property="Visibility" Value="Visible"/>
         <Style.Triggers>
            <DataTrigger Binding="{Binding IsValid}" Value="True">
               <Setter Property="Visibility" Value="Hidden"/>
            </DataTrigger>
      </Style>
   <local:UserControl4 DataContext="{Binding Page4}"/>
   <local:UserControl3 DataContext="{Binding Page3}"/>
   <local:UserControl2 DataContext="{Binding Page2}"/>
   <local:UserControl1 DataContext="{Binding Page1}"/>
</Grid>

(Предполагается, что DataContext для сетки уже установлено.)

Как это работает: Grid представляет элементы управления в том же месте на экране, упорядоченные сзади вперед.Поскольку они имеют одинаковый размер и непрозрачны, виден только последний из представленных.

Когда свойство IsValid устанавливается в представлении Page1, стиль меняет свой Visibilityдо Hidden.Теперь страница 2 видна.Это продолжается до тех пор, пока все четыре страницы не будут действительными.Поскольку мы устанавливаем Visibility в Hidden, а не Collapsed, Grid остается неизменным даже после того, как все четыре страницы невидимы.

Я не проверял это, поэтому яне знаю, как плохо вы будете иметь время с проблемами фокуса.Когда страница 1 становится невидимой, вы, вероятно, захотите, чтобы первый элемент управления на странице 2 получил фокус клавиатуры.Возможно, вам придется взглянуть на обсуждение логического фокуса в Обзор фокуса , чтобы узнать, как с этим справиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...