Почему в моем регионе не зарегистрирован ни один призменный регион? - PullRequest
0 голосов
/ 13 января 2019

Я пытаюсь настроить свое первое приложение призмы. У меня есть простой MainWindowShell с contentControl с призмой regionName и ViewA, отображаемым в этой области. Теперь я хочу переключиться с ViewA на ViewB, но у меня проблемы с навигацией. Кажется, что все отлично организовано, но когда дело доходит до regionManager.RequestNavigate (...) в regionManager не зарегистрирован регион, и навигация завершается неудачно. Я думаю, что отследил проблему, но не могу ее решить.

Я использую customControl. Так что нет xaml. Xaml происходит от controlTemplate / styling в resourceDictionary, и это, похоже, является проблемой.

Я попробовал то же самое с userControl, скопировал код из шаблона управления и вуаля! там был мой регион отлично прописан в regionManager. Но я не хочу использовать userControls, потому что каждый viewElement настраивается из resourceDictionary с помощью стилей и шаблонов. Так что у меня было бы много пустых бесполезных "xyUserControl.xaml" s

Я подумал, что мог бы найти решение - или, по крайней мере, обходной путь - для моей проблемы здесь в stackoverflow ( Призмные области из пользовательского RegionAdapter не отображаются в RegionManager List ). Но я не знаю, как это сделать в моем случае, или если это вообще возможно. Потому что решение было бы установить regionManager в коде так: RegionManager.SetRegionManager (targetContentControl, regionManager); Но мой код не знает ничего из шаблона xaml. Поэтому я отчаянно пытался это: RegionManager.SetRegionManager (this, regionManager); ... не работал У меня нет идей.

Вот RessourceDictionary:

  <Style TargetType="{x:Type userControls:MainWindowShell}">
    <Setter Property="Template" Value="{DynamicResource MainWindowShell}" />
  </Style>

  <ControlTemplate x:Key="MainWindowShell" TargetType="{x:Type userControls:MainWindowShell}">
      <Grid>
      <ContentControl regions:RegionManager.RegionName="{x:Static utilities:RegionNames.Content}">
      </ContentControl>
      </Grid>
  </ControlTemplate>

И MainWindowShell:

public class MainWindowShell : Window
{
    static MainWindowShell()
    {
        DefaultStyleKeyProperty.OverrideMetadata(typeof(MainWindowShell), new FrameworkPropertyMetadata(typeof(MainWindowShell)));
    }

    public MainWindowShell(IMainMenuViewModel viewModel, IRegionManager regionManager)
    {
        this.DataContext = viewModel;
    }
}

1 Ответ

0 голосов
/ 13 января 2019

Установка региона вручную (из конструктора или из другого места) - путь.

Но вы не можете просто сослаться на ContentControl из его автоматически созданного поля, вы должны найти его в шаблоне с GetTemplateChild и его part-name.

Я подозреваю, что это может быть немного проблематично для оболочки (фактически любой элемент управления хостингом в регионе), так как ваш элемент управления, как ожидается, будет работать с отсутствующими частями по соглашению. Тем, кто создает темы, следует хотя бы отметить, что части региона являются обязательными. Кроме того, добавьте эти TemplatePart атрибуты ...

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