Ich arbeite an einer Anwendung für mein Büro mit WPF mit Prism, und ich habe einen Roadblock getroffen. Ich fand ein Webinar, das von Brian Lagunas (einem der Entwickler von Prism) gehostet wurde, der einige der Dinge machte, die ich in dieser App machen musste, also habe ich im Grunde genommen Namespaces usw. angepasst, um sie an meine App anzupassen.Set-Eigenschaft 'Prism.Regions.RegionManager.RegionName' hat eine Ausnahme ausgelöst
Die Lösung wird kompiliert, aber es löst eine Ausnahme aus, wenn ich versuche, mit dem ContentControl mit Prism: RegionManager.RegionName zu navigieren.
Die Lösung hat 2 Projekte. Das erste Projekt nennt das MainWindow des zweiten Projekts. Mein Code ist unten.
Projekt 1 - Mainwindow
namespace AdjusterToolV2
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow
{
public MainWindow()
{
InitializeComponent();
}
private void btnLetters_Click(object sender, RoutedEventArgs e)
{
URLetters.MainWindow frm1 = new URLetters.MainWindow();
frm1.Show();
}
}
}
Prism Bootstrapper
using Prism.Unity;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using Microsoft.Practices.Unity;
using URLetters.Views;
namespace URLetters
{
public class Bootstrapper : UnityBootstrapper
{
protected override DependencyObject CreateShell()
{
return Container.Resolve<MainWindow>();
}
protected override void InitializeShell()
{
Application.Current.MainWindow.Show();
}
protected override void ConfigureContainer()
{
base.ConfigureContainer();
Container.RegisterType(typeof(object), typeof(PHLtrWithEvidenceView), "PHLtrWithEvidenceView");
}
}
}
XAML für Projekt 2 Haupt-Seite (Code hinter leer)
<Controls:MetroWindow x:Class="URLetters.MainWindow"
xmlns= "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:Controls="clr-namespace:MahApps.Metro.Controls;assembly=MahApps.Metro"
xmlns:d= "http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:prism="http://prismlibrary.com/"
prism:ViewModelLocator.AutoWireViewModel="True"
xmlns:local="clr-namespace:URLetters"
mc:Ignorable="d"
Title="Unresolved Liability Letters"
Height="500"
Width="700"
Icon="../Resources/GEICO.ico"
ResizeMode="NoResize"
WindowStartupLocation="CenterScreen">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="Auto"/>
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0" Background="#154995" HorizontalAlignment="Left" LastChildFill="False" Width="120">
<StackPanel Grid.Column="0">
<Button x:Name="btn48hrWithEvidence"
Command="{Binding NavigateCommand}"
CommandParameter="PHLtrWithEvidenceView"
x:FieldModifier="public"
Height="40"
Width="100"
Margin="10,10,0,0"
ToolTip="Letter to the PH with a 48 hour contact time limit. Used when evidence has been provided by the claimant" >
<TextBlock FontSize="11" Text="48 Hour - PH With Evidence" TextWrapping="Wrap" TextAlignment="Center" />
</Button>
<Button x:Name="btn48hrNoEvidence"
Height="40"
Width="100"
Margin="10,10,0,0"
ToolTip="Letter to the PH with a 48 hour contact time limit. Used when there is no evidence provided by the claimant" >
<TextBlock FontSize="11" Text="48 Hour - PH With No Evidence" TextWrapping="Wrap" TextAlignment="Center" />
</Button>
<Button x:Name="btnNoCtcPH"
Height="40"
Width="100"
Margin="10,10,0,0"
ToolTip="Letter to the PH advising them that we have reached an AT FAULT liability decision based on the evidence provided." >
<TextBlock FontSize="11" Text="No Contact - PH Liability Decision" TextWrapping="Wrap" TextAlignment="Center" />
</Button>
<Button x:Name="btnNoCtcPHLiabDenial"
Height="40"
Width="100"
Margin="10,10,0,0"
ToolTip="Letter to the PH advising them that we have denied liability because we have no evidence to support the PH involvement" >
<TextBlock FontSize="11" Text="No Contact - PH Liability Denial" TextWrapping="Wrap" TextAlignment="Center" />
</Button>
<Button x:Name="btnNoCtcCLMTLiabDenial"
Height="40"
Width="100"
Margin="10,10,0,0"
ToolTip="Letter to the CLAIMANT advising that we have denied liability because we have no evidence to support the PH involvement" >
<TextBlock FontSize="11" Text="No Contact - CLMT Liability Denial" TextWrapping="Wrap" TextAlignment="Center" />
</Button>
</StackPanel>
</DockPanel>
<DockPanel x:Name="ContentRegionName" Grid.Column="1">
<ContentControl prism:RegionManager.RegionName="ContentRegion"/>
</DockPanel>
</Grid>
</Controls:MetroWindow>
Ansichtsmodell für Projekt 2 Hauptfenster
using Prism.Mvvm;
using Prism.Regions;
using Prism.Commands;
namespace URLetters.ViewModels
{
public class MainWindowViewModel : BindableBase
{
private readonly IRegionManager _regionManager;
public DelegateCommand<string> NavigateCommand { get; set; }
public MainWindowViewModel(IRegionManager regionManager)
{
_regionManager = regionManager;
NavigateCommand = new DelegateCommand<string>(Navigate);
}
private void Navigate(string uri)
{
_regionManager.RequestNavigate("ContentRegion", uri);
}
}
}
Es die Ausnahme in der XAML-Datei auf dieser Linie wirft:
<ContentControl prism:RegionManager.RegionName="ContentRegion"/>
Ausnahme lautet: „Exception geworfen: 'System.Windows.Markup.XamlParseException' in PresentationFramework.dll
Zusätzliche Informationen: 'Set property' Prism.Regions.RegionManager.RegionName 'hat eine Ausnahme ausgelöst.' Zeilennummer '69' und Zeilenposition '14'. "
Dies passiert, wenn ich auf die Schaltfläche btnLetters klicke. Das URLetters MainWindow wird nicht geöffnet und dann wird die Ausnahme ausgelöst. Ich habe mir den Code nochmals angesehen und ihn mit den Beispielen im Webinar verglichen. Ich kann nicht herausfinden, warum die Ausnahme ausgelöst wird. Hilfe wäre sehr willkommen.
Oh ja, fast vergessen. Ich habe folgende NuGet Pakete installled: Prism Core-6.2 Prism Unity 6.2 Prism für WPF 6.2 MahApps.Metro 1.2.4 Unity 4.0.1 –