次の方法で共有


AdornerProvider.Activate メソッド

更新 : 2007 年 11 月

装飾がデザイナによって初めて要求されたときに呼び出されます。

名前空間 :  Microsoft.Windows.Design.Interaction
アセンブリ :  Microsoft.Windows.Design.Extensibility (Microsoft.Windows.Design.Extensibility.dll 内)

構文

'宣言
Protected Overridable Sub Activate ( _
    item As ModelItem, _
    view As DependencyObject _
)
'使用
Dim item As ModelItem
Dim view As DependencyObject

Me.Activate(item, view)
protected virtual void Activate(
    ModelItem item,
    DependencyObject view
)
protected:
virtual void Activate(
    ModelItem^ item, 
    DependencyObject^ view
)
protected function Activate(
    item : ModelItem, 
    view : DependencyObject
)

パラメータ

例外

例外 条件
ArgumentNullException

view が nullnull 参照 (Visual Basic では Nothing) です。

解説

装飾プロバイダでは、装飾する要素アイテムまたはビューを使用して装飾を初期化できます。このコンテキストが必要ない場合、装飾プロバイダで Activate メソッドをオーバーロードする必要はなく、コンストラクタで装飾を作成できます。このメソッドは、デザイナ UI が装飾の親として設定される前に呼び出されます。

1 つの AdornerProvider インスタンスを、有効期間中に何度もアクティブ化および非アクティブ化することができます。Activate メソッドと Deactivate メソッドを必要に応じて実装してください。

Activate メソッドをオーバーライドして、Slider コントロールをホストする AdornerPanel を作成する方法を次のコード例に示します。これは、装飾するコントロールの Background プロパティを設定するために使用されます。詳細については、「チュートリアル : デザイン時装飾の作成」を参照してください。

' The following method is called when the adorner is activated.
' It creates the adorner control, sets up the adorner panel,
' and attaches a ModelItem to the adorned control.
Protected Overrides Sub Activate(ByVal item As ModelItem, ByVal view As DependencyObject)

    ' Save the ModelItem and hook into when it changes.
    ' This enables updating the slider position when 
    ' a new Background value is set.
    adornedControlModel = item
    AddHandler adornedControlModel.PropertyChanged, AddressOf AdornedControlModel_PropertyChanged

    ' Setup the slider's min and max values.
    opacitySlider.Minimum = 0
    opacitySlider.Maximum = 1

    ' Setup the adorner panel.
    ' All adorners are placed in an AdornerPanel
    ' for sizing and layout support.
    Dim myPanel = Me.Panel

    AdornerPanel.SetHorizontalStretch(opacitySlider, AdornerStretch.Stretch)
    AdornerPanel.SetVerticalStretch(opacitySlider, AdornerStretch.None)

    Dim placement As New AdornerPlacementCollection()

    ' The adorner's width is relative to the content.
    ' The slider extends the full width of the control it adorns.
    placement.SizeRelativeToContentWidth(1.0, 0)

    ' The adorner's height is the same as the slider's.
    placement.SizeRelativeToAdornerDesiredHeight(1.0, 0)

    ' Position the adorner above the control it adorns.
    placement.PositionRelativeToAdornerHeight(-1.0, 0)

    ' Position the adorner up 5 pixels. This demonstrates 
    ' that these placement calls are additive. These two calls
    ' are equivalent to the following single call:
    ' PositionRelativeToAdornerHeight(-1.0, -5).
    placement.PositionRelativeToAdornerHeight(0, -5)

    AdornerPanel.SetPlacements(opacitySlider, placement)

    ' Initialize the slider when it is loaded.
    AddHandler opacitySlider.Loaded, AddressOf slider_Loaded

    ' Handle the value changes of the slider control.
    AddHandler opacitySlider.ValueChanged, AddressOf slider_ValueChanged

    AddHandler opacitySlider.PreviewMouseLeftButtonUp, _
        AddressOf slider_MouseLeftButtonUp

    AddHandler opacitySlider.PreviewMouseLeftButtonDown, _
        AddressOf slider_MouseLeftButtonDown

    MyBase.Activate(item, view)

End Sub

' The Panel utility property demand-creates the 
' adorner panel and adds it to the provider's 
' Adorners collection.
Public ReadOnly Property Panel() As AdornerPanel
    Get
        If Me.opacitySliderAdornerPanel Is Nothing Then
            Me.opacitySliderAdornerPanel = New AdornerPanel()

            ' Add the adorner to the adorner panel.
            Me.opacitySliderAdornerPanel.Children.Add(opacitySlider)

            ' Add the panel to the Adorners collection.
            Adorners.Add(opacitySliderAdornerPanel)
        End If

        Return Me.opacitySliderAdornerPanel
    End Get
End Property

// The following method is called when the adorner is activated.
// It creates the adorner control, sets up the adorner panel,
// and attaches a ModelItem to the adorned control.
protected override void Activate(ModelItem item, DependencyObject view)
{
    // Save the ModelItem and hook into when it changes.
    // This enables updating the slider position when 
    // a new Background value is set.
    adornedControlModel = item;
    adornedControlModel.PropertyChanged += 
        new System.ComponentModel.PropertyChangedEventHandler(
            AdornedControlModel_PropertyChanged);

    // Setup the slider's min and max values.
    opacitySlider.Minimum = 0;
    opacitySlider.Maximum = 1;

    // Setup the adorner panel.
    // All adorners are placed in an AdornerPanel
    // for sizing and layout support.
    AdornerPanel myPanel = this.Panel;

    AdornerPanel.SetHorizontalStretch(opacitySlider, AdornerStretch.Stretch);
    AdornerPanel.SetVerticalStretch(opacitySlider, AdornerStretch.None);

    AdornerPlacementCollection placement = new AdornerPlacementCollection();

    // The adorner's width is relative to the content.
    // The slider extends the full width of the control it adorns.
    placement.SizeRelativeToContentWidth(1.0, 0);

    // The adorner's height is the same as the slider's.
    placement.SizeRelativeToAdornerDesiredHeight(1.0, 0);

    // Position the adorner above the control it adorns.
    placement.PositionRelativeToAdornerHeight(-1.0, 0);

    // Position the adorner up 5 pixels. This demonstrates 
    // that these placement calls are additive. These two calls
    // are equivalent to the following single call:
    // PositionRelativeToAdornerHeight(-1.0, -5).
    placement.PositionRelativeToAdornerHeight(0, -5);

    AdornerPanel.SetPlacements(opacitySlider, placement);

    // Initialize the slider when it is loaded.
    opacitySlider.Loaded += new RoutedEventHandler(slider_Loaded);

    // Handle the value changes of the slider control.
    opacitySlider.ValueChanged += 
        new RoutedPropertyChangedEventHandler<double>(
            slider_ValueChanged);

    opacitySlider.PreviewMouseLeftButtonUp += 
        new System.Windows.Input.MouseButtonEventHandler(
            slider_MouseLeftButtonUp);

    opacitySlider.PreviewMouseLeftButtonDown += 
        new System.Windows.Input.MouseButtonEventHandler(
            slider_MouseLeftButtonDown);

    base.Activate(item, view);
}

// The Panel utility property demand-creates the 
// adorner panel and adds it to the provider's 
// Adorners collection.
public AdornerPanel Panel 
{ 
    get
    {
        if (this.opacitySliderAdornerPanel == null)
        {
            opacitySliderAdornerPanel = new AdornerPanel();

            opacitySliderAdornerPanel.Children.Add(opacitySlider);

            // Add the panel to the Adorners collection.
            Adorners.Add(opacitySliderAdornerPanel);
        }

        return this.opacitySliderAdornerPanel;
    } 
}

アクセス許可

  • 直前の呼び出し元に対する完全な信頼。このメンバは、部分的に信頼されているコードから使用することはできません。詳細については、「部分信頼コードからのライブラリの使用」を参照してください。

参照

参照

AdornerProvider クラス

AdornerProvider メンバ

Microsoft.Windows.Design.Interaction 名前空間

その他の技術情報

装飾アーキテクチャ

レイアウト空間と描画空間

機能プロバイダと機能コネクタ

チュートリアル : デザイン時装飾の作成