【发布时间】:2015-04-21 06:29:31
【问题描述】:
我删除了我之前的问题以适当地改写,因为我之前的帖子既没有帮助也不完整,imo。
为了清楚起见:我使用的是 Prism 框架并遵守严格的 MVVM 模式。
问题:当我加载在某个模块ModuleA 中定义的UserControl 时,它不会显示在Shell 视图中。但是,如果我在 ItemsControl 中加载我的 UserControl,我定义的元素会出现,但它们都“被压在一起”。
在 ModuleA 中,我有以下 UserControl:
<UserControl ...
...>
...
<Grid>
... My Content Here ...
</Grid>
</UserControl>
现在,在我的项目中,我已经定义了Shell:
<Window ...
...>
...
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="10"/>
<RowDefinition Height="10"/>
<RowDefinition Height="10"/>
</Grid.RowDefinitions>
<Border Grid.Row="0" .../>
<UserControl Grid.Row="1" prism:RegionManager.RegionName="ModuleARegion"/>
<Border Grid.Row="2" .../>
</Grid>
</Window>
现在,在这种情况下,所有内容都已加载,ModuleA 已被识别,但屏幕上没有显示任何内容。
但是,如果我将<UserControl Grid.Row="0" prism:RegionManger .../> 更改为<ItemsControl Grid.Row="0" prism:RegionManager .../>,我可以看到我在ModuleA UserControl 中布置的内容,但这些内容都是“挤在一起”的。
有没有人知道为什么会发生这种情况?
【问题讨论】:
-
你确定
RowHeight只是10像素吗?也许您应该尝试其他方法或Auto或* -
我说的是 RowDefinition *
-
@bit 是的,我在这个例子中只使用了 10。它可以是你想要的任何东西。更重要的是,第一行(0 索引)中没有显示任何内容。
-
尝试将
Border放在索引为0 的行中,并将UserControl放在其中。然后您可以根据需要使用BorderThickness和其他属性。 -
正如@JamesLucas 所说,UserControl 不支持此功能。在这种情况下,您必须通过创建一个类并从 RegionAdapter
T 作为用户控件继承来编写自己的自定义区域适配器。然后重写 Adapt 方法。最后,在 Bootstrapper 中,您必须覆盖 RegionAdapterMappings 并为您的自定义区域适配器注册映射。
标签: c# wpf xaml user-controls prism