我是XAML的新手,所以请注意我的问题可能包含一些误解的主题。
是否可以绑定XAML usercontrol全局(相对于窗口)位置以检查它当前是否在屏幕上可见? Usercontrol插入到ScrollViewer中,我想像是:
<UserControl x:Class="Test.MessageControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Width="300">
<StackPanel >
<Label Name="LabelTest"
Content="{Binding RelativeSource={RelativeSource Self},
Path=MAGIC-GOES-HERE-Location.Y }" />
</StackPanel>
</UserControl>
答案 0 :(得分:2)
不,不可能在XAML中获取控件的“位置”(至少不像我们习惯的那样直接)。在WPF中,控件不再具有“位置”属性。控件和屏幕元素只有宽度和高度属性,这无法帮助您找到它们在窗口中的位置。
但是: 如果你真的需要知道什么地方,你 CAN 使用属性搞清楚父控件。 (微软已经做到这一点,这是唯一可行的方法。)
的示例:的的
如果您有一个包含两行的网格,并且您的UserControl位于第二行 - 您可以将第一行的ActualHeight属性视为UserControl的“Location.Y”属性,而不是将控件本身视为为您提供位置。
这是你必须习惯的东西,因为没有任何方法可以解决它。
请考虑在设计中的某处使用 <Grid>
元素。它以非常直接的方式提供有关控件位置的信息。它的工作方式类似于动态调整HTML表格的更智能版本。您可以根据需要检索任何行或列的ActualWidth和ActualHeight属性 - 甚至是整个网格本身。