如何设置一个rect属性,其宽度和高度绑定到XAML中的元素?

时间:2013-11-19 22:34:31

标签: xaml windows-8 windows-store-apps winrt-xaml

我有一个带有" SafeDisplayArea"的自定义控件。属性。 SafeDisplayArea属性告诉控件控件的哪些部分可以安全显示。

SafeDisplayArea是一个Rect。

像这样在XAML中设置属性就可以了。

<CustomControl SafeDisplayArea="0,0,100,200"/>

我想要做的是将SafeDisplayArea的高度和宽度设置为与页面中的其他元素相同。

类似的东西:

<CustomControl SafeDisplayArea="0,0,{Binding Width, ElementName=TitleBar}, {Binding Height, ElementName=TitleBar}" />

有办法做到这一点吗?

3 个答案:

答案 0 :(得分:0)

在WPF中,最好的选择可能是使用MultiBinding,遗憾的是这个类在WinRT中不可用...

另一种选择是绑定到TitleBar本身并使用转换器返回Rect

<CustomControl SafeDisplayArea="{Binding ElementName=TitleBar, Converter={StaticResource elementToRectConverter}}" />

答案 1 :(得分:0)

这是不可能的。我们都想做这个!

转换器解决方案适用于OneTime绑定,但Rect转换器的开销无关紧要。转换器本身很昂贵,如果它发生在许多地方或经常发生,这将是一个潜在的昂贵操作。

最好的办法是你不能这样做。

  

绑定的限制几乎总是性能影响的结果。如果您考虑StaticResource的存在,但缺少DynamicResource,您可以清楚地看到这一点。 StaticResources几乎与Mode = OneTime相同,而Dynamic几乎与Mode = TwoWay绑定相同。在WinRT-XAML中,这些带有WPF的增量通常用于实现更快的接口。仅仅因为你可以绕过这些性能预防措施,并不意味着这是一个好主意。

话虽如此,这是你的应用程序。你知道最后什么是最好的。如果这是必要的要求,那么性能含义是您可以主动选择接受的。我想我们都意识到了这一点。

祝你好运!

答案 2 :(得分:0)

为什么不为每个宽度和高度创建一个可绑定属性,并在setter中设置适当的矩形属性?