Я пытаюсь настроить свое первое приложение призмы. У меня есть простой 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;
}
}