FindAncestor RelativeSource仅支持'Self'和'TemplatedParent', 但我必须将弹出窗口的宽度绑定到页面的宽度。
为页面命名会导致问题,因为有时会出现问题 抛出异常,说可视树中已存在具有该名称的控件。
<Popup IsOpen="True"
Width="{Binding ElementName=BordPage, Path=Width}"
Height="{Binding ElementName=BordPage, Path=Height}">
背景资料:
我在这里使用基于SL4导航的应用程序。 BordPage是一个导航页面, 我在应用程序中多次使用它。所以在页面中给它起一个名字并不是一个好主意, 但我不知道我怎么能绑定到页面的宽度和高度。
我要做的是在整个屏幕上覆盖黑色边框(不透明度为0.8), (包括MainPage的控件)。然后,我想显示一些其他控件。
由于应用程序是触控式的,因此为用户提供一个ComboBox来选择一个值并不能真正起作用。相反,我希望显示这个黑色覆盖窗口,其中列表框占据了大部分屏幕,因此用户只需单击即可轻松触摸他想要的值。
更新:我刚刚意识到我可以使用ChildWindow类来执行此操作。 但我原来的问题仍然存在。
答案 0 :(得分:1)
我对此问题的一般解决方案是编写自定义行为。它不是纯粹的XAML解决方案,但它为您提供了更大的灵活性。
创建一个行为,搜索VisualTree以找到正确的项目,然后让它正确设置Popup的宽度。
它可能比直接绑定更复杂,但它避免了所有命名问题。
答案 1 :(得分:1)
将以下内容放在控件的构造函数中,这样就可以避免命名它:
DataContext = this;