【问题标题】:How to get the Control for a Region in Prism如何在 Prism 中获取区域的控制
【发布时间】:2009-08-30 12:47:32
【问题描述】:

有谁知道如何在 Prism 中获取与区域相关联的控件。

例如,如果我有以下代码来注册一个区域

RegionManager.SetRegionName(Outlook.navigationContainer, "navigationContainer");

如何通过名称“navigationContainer”获取控件 Outlook.navigationContainer?

谢谢大家。

【问题讨论】:

    标签: .net wpf controls prism


    【解决方案1】:

    回答你的问题:

    您可能会创建一些使用自定义区域行为来跟踪这一点的东西。 RegionBehaviors的详细信息可以在这里找到:http://msdn.microsoft.com/en-us/library/dd458944.aspx

    您只需创建一个跟踪区域名称和关联控件的字典,因为您可以从区域行为中访问两者。

    如果您在将视图添加到区域时需要访问控件,则您可能需要为此目的使用区域适配器(详细信息在上面的同一链接中)。

    然而,我同意肯特 150% 的观点,我觉得你在做你不应该做的事情。如果您正在尝试自定义布局或创建动画等,您应该真正专注于不需要您破坏 Regions 给您的抽象的策略。

    像带有数据触发器的样式这样简单的东西可以为您提供所需的内容,并且不会强迫您从将视图添加到区域的代码中了解太多关于容器的信息。

    【讨论】:

    • 您好,我同意您的说法,但是,如果我有复杂的功能,例如根据注入的内容修改区域控件上的属性,该怎么办。我可以看到可以实现这一点的唯一方法是公开控件或至少公开其界面。有什么建议吗?
    • 您可以使用区域适配器来实现这一点,但听起来很奇怪,您需要根据内容更改容器而不是样式,而不是您必须执行的操作。我建议探索在此处使用带有 DataTriggers 的样式的可能性。
    【解决方案2】:

    区域应该从您那里抽象出区域控制的细节。为什么需要控制权?

    【讨论】:

    • 您好 Kent,我同意您的说法,但是,如果我有复杂的功能,例如根据注入的内容修改区域控件上的属性,该怎么办。我可以看到可以实现这一点的唯一方法是公开控件或至少公开其界面。有什么建议吗?
    【解决方案3】:

    我认为您不能通过区域名称轻松获得关联的控件。

    SetRegionName 方法仅在指定控件上设置“RegionNameProperty”DependencyProperty。您唯一能做的就是在您拥有控制权时取回名称。

    【讨论】:

      【解决方案4】:

      想想,

      如果您想更改注入到区域中的模块的属性,最好的方法是根据您的情况使用路由事件或路由命令。

      我这样做的方式是,当模块初始化时,我为需要更改的属性订阅事件。如果系统中的任何其他模块需要更改该属性,我只需触发该事件。

      我希望这能让你走上正轨。

      问候 科尼利厄斯克鲁格

      【讨论】:

        猜你喜欢
        • 2012-03-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-15
        • 2016-07-29
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多