XAML - 将用户控件相对于整个窗口的位置作为绑定属性

时间:2009-06-29 21:32:05

标签: xaml user-controls

我是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>

1 个答案:

答案 0 :(得分:2)

不,不可能在XAML中获取控件的“位置”(至少不像我们习惯的那样直接)。在WPF中,控件不再具有“位置”属性。控件和屏幕元素只有宽度和高度属性,这无法帮助您找到它们在窗口中的位置。

但是: 如果你真的需要知道什么地方,你 CAN 使用属性搞清楚父控件。 (微软已经做到这一点,这是唯一可行的方法。)

示例:
如果您有一个包含两行的网格,并且您的UserControl位于第二行 - 您可以将第一行的ActualHeight属性视为UserControl的“Location.Y”属性,而不是将控件本身视为为您提供位置。

这是你必须习惯的东西,因为没有任何方法可以解决它。

请考虑在设计中的某处使用 <Grid> 元素。它以非常直接的方式提供有关控件位置的信息。它的工作方式类似于动态调整HTML表格的更智能版本。您可以根据需要检索任何行或列的ActualWidth和ActualHeight属性 - 甚至是整个网格本身。