我有一个带有" SafeDisplayArea"的自定义控件。属性。 SafeDisplayArea属性告诉控件控件的哪些部分可以安全显示。
SafeDisplayArea是一个Rect。
像这样在XAML中设置属性就可以了。
<CustomControl SafeDisplayArea="0,0,100,200"/>
我想要做的是将SafeDisplayArea的高度和宽度设置为与页面中的其他元素相同。
类似的东西:
<CustomControl SafeDisplayArea="0,0,{Binding Width, ElementName=TitleBar}, {Binding Height, ElementName=TitleBar}" />
有办法做到这一点吗?
答案 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中设置适当的矩形属性?