代码之家  ›  专栏  ›  技术社区  ›  TimothyP

Silverlight 4中用于绑定到页面属性的findancestor relativesource的替代方法

  •  0
  • TimothyP  · 技术社区  · 14 年前

    findancestor relativesource仅支持“self”和“templatedParent”, 但我必须将弹出窗口的宽度绑定到页面的宽度。

    给页面命名会导致问题,因为有时会 引发异常,表示可视化树中已存在具有该名称的控件。

    <Popup IsOpen="True"
           Width="{Binding ElementName=BordPage, Path=Width}"
           Height="{Binding ElementName=BordPage, Path=Height}">
    

    背景信息:

    我在这里使用一个基于SL4导航的应用程序。bordpage是一个导航页, 在应用程序中多次使用。所以在页面上命名并不是一个好主意, 但我不知道如何才能绑定到页面的宽度和高度。

    我要做的是用一个黑色的边框(不透明度为0.8)覆盖整个屏幕, (包括主页的控件)。除此之外,我还想显示一些其他控件。

    由于应用程序是触摸控制的,所以为用户提供一个组合框来选择一个值并不真正有效。相反,我想显示这个黑色覆盖窗口,一个列表框占据大部分屏幕,这样用户只需单击一下就可以简单地触摸到他想要的值。

    更新 :我刚刚意识到我可以用ChildWindow类来做这个。 但我最初的问题仍然存在。

    2 回复  |  直到 14 年前
        1
  •  1
  •   Stephan    14 年前

    对于这个问题,我的一般解决方案是编写一个自定义行为。这不是一个纯粹的XAML解决方案,但它给了您更多的灵活性。

    创建搜索VisualTree以查找正确项的行为,然后让它正确设置弹出窗口的宽度。

    它可能比直接绑定要复杂一些,但它避免了所有的命名问题。

        2
  •  1
  •   David Allen    14 年前

    将以下内容放入控件的构造函数中,以便避免对其命名:

    DataContext = this;