我有一個自定義面板,它定義了這個依賴屬性:的DependencyProperty變化不會觸發安排
public static readonly DependencyProperty DragPositionProperty =
DependencyProperty.Register(
"DragPosition",
typeof(Point),
typeof(LogViewHeaderPanel),
new FrameworkPropertyMetadata(
new Point(),
FrameworkPropertyMetadataOptions.AffectsParentArrange
)
);
注:我已經試過FrameworkPropertyMetadataOptions.AffectsArrange以及...
那LogViewHeaderPanel是我自定義ItemsControl的面板,名爲LogViewHeader。它的項目是ColumnHeader類型。當鼠標移動,和其他一些條件的LogViewHeader內滿足,目標的columnHeader具有使用下面的代碼的屬性設置:
_currentlyActiveColumnHeader.SetValue(
LogViewHeaderPanel.DragPositionProperty,
new Point(suggestedXPosition, originalPosition.Y)
);
如果我把一個斷點在我的修調LogViewHeaderPanel.ArrangeOverride,我可以看到它在LogViewHeader被創建/調整大小時被調用,但在DragPosition屬性設置爲子級時不會被調用。
爲什麼FrameworkPropertyMetadataOptions.AffectsParentArrange參數在設置屬性時不觸發排列?
要設置在'_currentlyActiveColumnHeader'的'DragPosition'財產,我的猜測是不是'LogViewHeaderPanel'。儘管我不確定這裏是否重要,但您必須將'DragPosition'註冊爲此類用途的附加屬性。只需用'DependencyProperty.RegisterAttached'替換'DependencyProperty.Register'。 – Clemens
另請注意[Remarks here](http://msdn.microsoft.com/en-us/library/system.windows.frameworkpropertymetadata.affectsparentarrange.aspx):'通常,您不需要報告FrameworkElement的更改屬性添加到使用AffectsParentArrange的父元素,因爲元素本身已經有自己的AffectsArrange爲true。這通常是足夠的,因爲子元素的變化通常會在適當的時候啓動父母安排。「# – Clemens
@Clemens謝謝你的工作。該屬性僅用於面板的佈局目的,它不會影響子本身上的任何其他屬性,然後可能會傳播佈局更改。我正在使用這種技術做一個「可視化」的拖放操作,就像移動瀏覽器標籤一樣,內置的DoDragDrop和Adorner功能都不會(據我所知)給出相同的視覺效果。或者,我是否完全用錯誤的方式去談論這個問題? – Lee