【问题标题】:WPF UserControl Not DisplayingWPF用户控件不显示
【发布时间】: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 已被识别,但屏幕上没有显示任何内容。

但是,如果我将&lt;UserControl Grid.Row="0" prism:RegionManger .../&gt; 更改为&lt;ItemsControl Grid.Row="0" prism:RegionManager .../&gt;,我可以看到我在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


【解决方案1】:

Prism 中的默认区域适配器不支持 UserControl。您需要使用 ContentControl、ItemsControl 或基于 Selector 的控件(如 ComboBox)来获得开箱即用的支持或编写您自己的区域适配器。

注意:当您与其区域交互时,区域适配器用于在特定类型控件的区域中添加和删除控件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-12-07
    • 2011-04-20
    • 1970-01-01
    • 1970-01-01
    • 2013-04-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多