0

我有一个自定义面板,它定义了这个依赖属性:

public static readonly DependencyProperty DragPositionProperty =
    DependencyProperty.Register(
    "DragPosition",
    typeof(Point),
    typeof(LogViewHeaderPanel),
    new FrameworkPropertyMetadata(
        new Point(),
        FrameworkPropertyMetadataOptions.AffectsParentArrange
    )
);

注意:我也尝试过 FrameworkPropertyMetadataOptions.AffectsArrange ......

LogViewHeaderPanel 是我的名为 LogViewHeader 的自定义 ItemsControl 的面板。它的项目是 ColumnHeader 类型。每当鼠标移动,并且在 LogViewHeader 中满足一些其他条件时,目标 ColumnHeader 使用以下代码设置属性:

_currentlyActiveColumnHeader.SetValue(
    LogViewHeaderPanel.DragPositionProperty,
    new Point(suggestedXPosition, originalPosition.Y)
);

如果我在 LogViewHeaderPanel.ArrangeOverride 的覆盖上放置一个断点,我可以看到它在 LogViewHeader 被创建/调整大小时被调用,但在 DragPosition 属性被设置在它的孩子上时不会被调用。

为什么在设置属性时 FrameworkPropertyMetadataOptions.AffectsParentArrange 参数不触发排列?

4

1 回答 1

1

您正在将DragPosition属性设置为_currentlyActiveColumnHeader,这不是LogViewHeaderPanel。对于这种用途,您必须注册DragPosition附属财产

只需替换DependencyProperty.RegisterDependencyProperty.RegisterAttached

public static readonly DependencyProperty DragPositionProperty =
    DependencyProperty.RegisterAttached(
        "DragPosition", typeof(Point), typeof(LogViewHeaderPanel),
        new FrameworkPropertyMetadata(
            new Point(), FrameworkPropertyMetadataOptions.AffectsParentArrange));
于 2013-07-24T15:36:01.163 回答