Attachedプロパティ

WPFでは、Attachedプロパティという新しい種類のプロパティが新たに追加されています。
Attachedプロパティは、親から子へ提供されるプロパティです。たとえば、System.Windows.Controls名前空間Canvasクラスのメンバ一覧を見ると、下記の4つのAttachedプロパティが存在します。

XAMLでAttachedプロパティを設定する場合、下記のように記述します。
XAML

      <Canvas>
        <Button Canvas.Left="100" Canvas.Top="100">Hello World</Button>
      </Canvas>
この記述で、「Hello World」と書かれたボタンがCanvasの中の上から100左から100の位置に表示されます。このように、Attachedプロパティの持ち主は親であるCanvasクラスですが、実際に値が設定されるのは子であるButtonクラスということになります。当然ながら、もうSystem.Windows.Controls.Buttonクラスには従来のようにTopやLeftといったプロパティは存在しません。
これと同じことをコードで記述する場合、下記のようになります。
Visual Basic
        Dim myCanvas As New Canvas, myButton As New Button
        myButton.Content = "Hello World"
        myCanvas.Children.Add(myButton)
        Canvas.SetTop(myButton, 100.0)
        Canvas.SetLeft(myButton, 100.0)
        Me.Content = myCanvas
コードで親と子の関係を作るには、CanvasクラスにあるChildrenプロパティを使います。
Attachedプロパティ設定する場合には、そのためのSet***メソッドが用意されていますのでこれらを使って設定します。これらのメソッドはSharedメソッドであることに注意してください。

Buttonの「Hello World」という文字列は、TextプロパティではなくContentプロパティに設定しています。System.Windows.Controls.ButtonクラスにTextプロパティはありません。ContentプロパティはObject型なので、上記のように直接文字列を設定することもできますが、コンテナ系(試した限りではPanelクラスを継承しているクラス)のオブジェクトを設定できます。
たとえば、下記のように記述すればTextBoxを中に持ったButtonが表示されます。

        Dim myCanvas As New Canvas, myButton As New Button
        Dim myDockPanel As New DockPanel, myTextBox As New TextBox
 
        myTextBox.Text = "GrapeCity"
        myDockPanel.Children.Add(myTextBox)
        myButton.Content = myDockPanel
        myButton.Width = 100
        myButton.Height = 30
        myCanvas.Children.Add(myButton)
 
        Me.Content = myCanvas