【问题标题】:XAML - get user control position relative to whole window as binding propertyXAML - 获取相对于整个窗口的用户控件位置作为绑定属性
【发布时间】:2009-06-29 21:32:05
【问题描述】:

我是 XAML 的新手,所以请注意我的问题可能包含一些主题误解。

是否可以绑定 XAML 用户控件全局(相对于窗口)位置以检查它当前是否在屏幕上可见?用户控件插入到 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>

【问题讨论】:

    标签: xaml user-controls


    【解决方案1】:

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

    但是:如果您真的需要知道某物在哪里,您可以使用属性找出它的父控件。 (微软已经做到了,因此这是唯一可靠的方法了。)

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

    这是您必须习惯的事情,因为不再有任何方法可以绕过它。

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

    【讨论】:

      猜你喜欢
      • 2010-12-29
      • 2018-01-03
      • 2011-06-27
      • 2017-10-22
      • 1970-01-01
      • 1970-01-01
      • 2021-04-17
      • 2015-02-20
      • 1970-01-01
      相关资源
      最近更新 更多