2009-06-29 5 views
1

XAMLを初めて使用しているので、私の質問に誤解があるかもしれません。XAML - バインディングプロパティとしてウィンドウ全体に対するユーザーコントロールの位置を取得

XAML 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> 

答えて

2

いいえ、(直接ではなく、私たちは、少なくとも、に使用されているように)XAMLのあなたのコントロールの「場所」を取得することはできません。 WPFでは、コントロールには「場所」プロパティがもうありません。コントロールと画面要素には幅と高さのプロパティしかありません。ウィンドウ内のどこにあるのかわかりません。

しかし:あなたは本当に何かがどこにあるか知る必要がある場合は、あなたが CANフィギュアそれを親コントロールのプロパティを使用して。 (これはもうこれを行うための唯一の信頼できる方法であるように、Microsoftはそれを作っています。)

例:
を使用すると、2つの行のグリッドを持って、そしてあなたのユーザーコントロールは、2行目である場合 - あなたは最初の行のActualHeightプロパティを扱うことができます、その場所を提供するコントロール自体を探すのではなく、UserControlの "Location.Y"プロパティです。

これは、もはや周囲を回る方法がないため、慣れていなければならないことです。

デザインのどこかに<Grid>要素を使用することを検討してください。非常に単純な方法でコントロールの位置に関する情報を提供します。ダイナミックにサイジングするHTMLテーブルのよりスマートなバージョンのように機能します。任意の行または列、または必要に応じてグリッド全体のActualWidthおよびActualHeightプロパティを取得できます。

関連する問題