棱镜区域中的重叠透明视图
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>
我想知道是否有办法在一个命名区域中显示两个重叠的透明视图?下面的示例显示了两个重叠的透明视图,它们位于第一个网格行中各自独立的命名区域容器中。在第二个网格行中,我们有一个命名区域 "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>