棱镜区域中的重叠透明视图

Overlapping Transparent Views in a Prism Region

我想知道是否有办法在一个命名区域中显示两个重叠的透明视图?下面的示例显示了两个重叠的透明视图,它们位于第一个网格行中各自独立的命名区域容器中。在第二个网格行中,我们有一个命名区域 "RegionC"。第一个注册的视图是显示的视图 ("ViewA")。如果我们有多个视图注册到一个区域,那么我们一次只能显示一个视图,我是否正确?有没有办法在一个命名区域中显示两个重叠的视图?或者添加另一个内容控件以支持显示的多个视图是标准做法吗?我想要这样做的原因之一是我可以更好地将我的 XAML 代码分开在单独的视图中,并根据需要将它们注入一个区域容器。

ShellWindow.xaml

<Window x:Class="PrismDemo.Views.ShellWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:prism="http://prismlibrary.com/"
    prism:ViewModelLocator.AutoWireViewModel="True"
    Title="{Binding Title}" Height="150" Width="325" >
<Grid ShowGridLines="True">
    <Grid.RowDefinitions>
        <RowDefinition Height="*"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <ContentControl Grid.Row="0"  prism:RegionManager.RegionName="RegionA" />
    <ContentControl Grid.Row="0"  prism:RegionManager.RegionName="RegionB" />
    <ContentControl Grid.Row="1"  prism:RegionManager.RegionName="RegionC" />
</Grid>

ShellWindow.xaml.cs

using Prism.Regions;
using System.Windows;

namespace PrismDemo.Views
{
    public partial class ShellWindow : Window
    {
        public ShellWindow(IRegionManager regionManager)
        {
            InitializeComponent();

            regionManager.RegisterViewWithRegion("RegionA", typeof(ViewA));
            regionManager.RegisterViewWithRegion("RegionB", typeof(ViewB));
            regionManager.RegisterViewWithRegion("RegionC", typeof(ViewA));
            regionManager.RegisterViewWithRegion("RegionC", typeof(ViewB));
        }
    }
}


ViewA.xaml

<UserControl x:Class="PrismDemo.Views.ViewA"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:PrismDemo.Views"
         mc:Ignorable="d" 
         d:DesignHeight="200" d:DesignWidth="300">
<TextBlock Text="ViewA" FontSize="20" />

ViewB.xaml

<UserControl x:Class="PrismDemo.Views.ViewB"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:PrismDemo.Views"
         mc:Ignorable="d" 
         d:DesignHeight="200" d:DesignWidth="300">
<TextBlock Text="ViewB" FontSize="30" />

Am I correct that if we have multiple views registered to a region then we can only show one view at a time?

对于 ContentControl 中的区域,是的,你是对的,因为它一次只能有一个 Content。但基本上任何控件都可以承载一个区域(前提是您创建了一个关联的 regionAdapter),例如,一个 ItemsControl 或一个 TabControl 可以同时在其中包含多个视图。

Is there a way to show two overlapped views in one named Region?

是的,例如,如果您为 Grid 提供 RegionAdapter

Or is it standard practice to add another content control to support multiple views shown?

是也不是。多区域多视图标配,同一区域多视图不标配

对于您所在的区域 RegionC,您应该使用 ItemsControl 而不是 ContentConrol,并将其 ItemsPanel 设置为 Grid

这里是 XAML:

    <ItemsControl Grid.Row="1"  prism:RegionManager.RegionName="RegionC">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <Grid IsItemsHost="True" />
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
    </ItemsControl>