Prism:区域停用时出现 InvalidOperationException。 "Deactivation is not possible in this type of region."
Prism: InvalidOperationException at region deactivation. "Deactivation is not possible in this type of region."
我正在使用 PRISM 5.0 开发 WPF 应用程序。
有时我想停用特定区域中的所有活动视图。
IRegion contentRegion = _regionManager.Regions
.First(region => region.Name == RegionNames.ContentRegion);
foreach (object view in contentRegion.ActiveViews)
{
contentRegion.Deactivate(view);
}
但是此时我得到一个例外:
System.InvalidOperationException was unhandled by user code
HResult=-2146233079
Message=Deactivation is not possible in this type of region.
Source=Microsoft.Practices.Prism.Composition
StackTrace: ...
InnerException:
我的区域仅在基础视图中声明为Shell.xaml
<Border Grid.Column="1" BorderBrush="#193441" BorderThickness="2,2,2,2">
<ContentControl regions:RegionManager.RegionName="ContentRegion" />
</Border>
区域停用取决于实施
Deactivate
在 IRegion
上的行为取决于您在 xaml 中设置声明区域的实现。
其实现由在视图(此处为主视图 Shell.xaml)中设置的控件类型设置。
可能的实施方式以及如何设置它们:
SingleActiveRegion
(由ContentControl
设置):一次只有一个活动区域。它会在其他视图激活时自动停用视图。
AllActiveRegion
(由ItemsControl
设置):所有视图都可见且处于活动状态。调用 Deactivate
将导致 InvalidOperationException
.
Region
(由Selector
设置):它允许多个活动和非活动视图。
它在 this post 中有广泛描述。
更改区域声明
对我来说,在这个区域只有一个活动视图更舒服,所以我将 Shell.xaml
中的区域声明更改为:
<Border Grid.Column="1" BorderBrush="#193441" BorderThickness="2,2,2,2">
<ContentControl regions:RegionManager.RegionName="ContentRegion" />
</Border>
现在我所在的地区是 SingleActiveRegion
类型,我不必打电话给 Deactivate
。
我什么时候可以使用Deactivate
- 当您有
ContentControl
并且您只想停用活动视图时
- 如果您想保留多个活动视图,您必须在 .xaml 中使用
Selector
控件 - 然后您可以使用 Deactivate
我正在使用 PRISM 5.0 开发 WPF 应用程序。
有时我想停用特定区域中的所有活动视图。
IRegion contentRegion = _regionManager.Regions
.First(region => region.Name == RegionNames.ContentRegion);
foreach (object view in contentRegion.ActiveViews)
{
contentRegion.Deactivate(view);
}
但是此时我得到一个例外:
System.InvalidOperationException was unhandled by user code
HResult=-2146233079
Message=Deactivation is not possible in this type of region.
Source=Microsoft.Practices.Prism.Composition
StackTrace: ...
InnerException:
我的区域仅在基础视图中声明为Shell.xaml
<Border Grid.Column="1" BorderBrush="#193441" BorderThickness="2,2,2,2">
<ContentControl regions:RegionManager.RegionName="ContentRegion" />
</Border>
区域停用取决于实施
Deactivate
在 IRegion
上的行为取决于您在 xaml 中设置声明区域的实现。
其实现由在视图(此处为主视图 Shell.xaml)中设置的控件类型设置。
可能的实施方式以及如何设置它们:
SingleActiveRegion
(由ContentControl
设置):一次只有一个活动区域。它会在其他视图激活时自动停用视图。AllActiveRegion
(由ItemsControl
设置):所有视图都可见且处于活动状态。调用Deactivate
将导致InvalidOperationException
.Region
(由Selector
设置):它允许多个活动和非活动视图。
它在 this post 中有广泛描述。
更改区域声明
对我来说,在这个区域只有一个活动视图更舒服,所以我将 Shell.xaml
中的区域声明更改为:
<Border Grid.Column="1" BorderBrush="#193441" BorderThickness="2,2,2,2">
<ContentControl regions:RegionManager.RegionName="ContentRegion" />
</Border>
现在我所在的地区是 SingleActiveRegion
类型,我不必打电话给 Deactivate
。
我什么时候可以使用Deactivate
- 当您有
ContentControl
并且您只想停用活动视图时 - 如果您想保留多个活动视图,您必须在 .xaml 中使用
Selector
控件 - 然后您可以使用Deactivate