我有一个自定义面板,它定义了这个依赖属性:
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参数不会触发排列?
答案 0 :(得分:1)
您要在DragPosition
上设置_currentlyActiveColumnHeader
属性,该属性不是LogViewHeaderPanel
。对于此类用途,您必须将DragPosition
注册为attached property。
只需将DependencyProperty.Register
替换为DependencyProperty.RegisterAttached
:
public static readonly DependencyProperty DragPositionProperty =
DependencyProperty.RegisterAttached(
"DragPosition", typeof(Point), typeof(LogViewHeaderPanel),
new FrameworkPropertyMetadata(
new Point(), FrameworkPropertyMetadataOptions.AffectsParentArrange));