2009-08-18 19 views
0

我正在使用Adorner模型進行拖放操作,並且通過ContentPresenter實例化DataTemplate並將其添加到控件/窗口的Adorner圖層中。我遇到的問題是我需要在實例化的DataTemplate的根視覺元素上註冊鼠標事件,這樣我可以更改狀態並檢測行爲中的下降。由於我正在編寫一個行爲,我需要在代碼中訪問它。我可以嘗試將事件附加到演示者本身,但那不起作用,我假設我可能能夠在DataTemplate中使用TemplateBinding,但我並不想將這種負擔放在創建人員身上DataTemplate。訪問承載DataTemplate的ContentPresenter的根視覺

<DataTemplate> 
    <TextBlock Text={Binding Path=Name} /> 
</DataTemplate> 

ContentPresenter presenter = new ContentPresenter(); 
presenter.Child = myDataTemplate; 

adornerLayer.Items.Add(presenter); 

回答

0

不能使用VisualTreeHelper走了AdornedElement的可視化樹,或嘗試鑄造框架元素通過邏輯樹工作?

添加到自定義裝飾器中的此方法將從裝飾元素的樹中檢索根視覺 - 可能是窗口。

public UIElement GetRootVisual() 
    { 
     UIElement root = AdornedElement; 
     if (root != null) 
     { 
      UIElement parent = VisualTreeHelper.GetParent(root) as UIElement; 
      if (parent != null) 
      { 
       root = parent; 
      } 
     } 

     return root; 
    }