簡體   English   中英

是否可以給Adorner一個絕對位置或將其向左移動一些?

[英]Is it possible to give an Adorner an absolute position or to move it for example a bit more to the left?

目前,我遇到的問題是顯示的錯誤超出了幾個標簽或文本框。 我希望能夠給裝飾者一個絕對的位置。 如果那不可能,那么我想將其向左移動。 現在,我無法在互聯網上找到有關裝飾者位置的有用信息。 所以我想知道是否有辦法改變裝飾者的位置?

如果能夠幫助您找到裝飾者位置的解決方案,則可以在此處粘貼我的代碼。

所有幫助將不勝感激

提前致謝

您應該從Adorner對象派生,並在那里覆蓋位置確定邏輯,這將使您能夠進行各種技巧,包括絕對/相對定位。

public class ControlAdorner: Adorner
{
    #region Private fields

    // Utilized for caching of offset by x co-ordinate.
    private double m_OffsetX = 0d;

    // Uri    private double m_OffsetY = 0d;
    #endregion

    #region Initialization
    public ControlAdorner( UIElement adornedElement )
        : base( adornedElement )
        {

        }
    #endregion

    #region Implementation
    //Measures content.
    protected override Size MeasureOverride( Size constraint )
    {
        m_child.Measure( constraint );
        return AdornedElement.RenderSize;
    }

    //Arranges child control to the full size.
    protected override Size ArrangeOverride( Size finalSize )
    {
        m_child.Arrange( new Rect( finalSize ) );
        return m_child.RenderSize;
    }

    public override GeneralTransform GetDesiredTransform( GeneralTransform transform )
    {
        GeneralTransformGroup group = new GeneralTransformGroup();
        group.Children.Add( transform );
        group.Children.Add( new TranslateTransform( OffsetX, OffsetY ) );
        return group;
    }

    //Get visual by index.
    protected override Visual GetVisualChild( int index ) 
    {
        return m_child;
    }

    private static void OnOffsetXChanged( DependencyObject d, DependencyPropertyChangedEventArgs e )
    {
        ControlAdorner instance = (ControlAdorner)d;
        instance.OnOffsetXChanged( e );
    }

    private void OnOffsetXChanged( DependencyPropertyChangedEventArgs e )
    {
        m_OffsetX = (double)e.NewValue;
        if( OffsetXChanged != null )
        {
            OffsetXChanged( this, e );
        }
    }

    private static void OnOffsetYChanged( DependencyObject d, DependencyPropertyChangedEventArgs e )
    {
        ControlAdorner instance = (ControlAdorner)d;
        instance.OnOffsetYChanged( e );
    }

    private void OnOffsetYChanged( DependencyPropertyChangedEventArgs e )
    {
        m_OffsetY = (double)e.NewValue;
        if( OffsetYChanged \!= null )
        {
            OffsetYChanged( this, e );
        }
    }
    #endregion

    #region Events
    public event PropertyChangedCallback OffsetXChanged;
    public event PropertyChangedCallback OffsetYChanged;
    public double OffsetX
    {
        get
        {
            return m_OffsetX;
        }
        set
        {
            SetValue( OffsetXProperty, value );
        }
    }
    public double OffsetY
    {
        get
        {
            return m_OffsetY;
        }
        set
        {
            SetValue( OffsetYProperty, value );
        }
    }

    // Gets visual children count, always 1.
    protected override int VisualChildrenCount
    {
        get
        {
            return 1;
        }
    }
    #endregion

    #region Dependency properties
    public static readonly DependencyProperty OffsetXProperty = DependencyProperty.Register( 
      "OffsetX", typeof( double ), typeof( ControlAdorner ),
      new FrameworkPropertyMetadata( 0d,    
        FrameworkPropertyMetadataOptions.AffectsArrange | 
        FrameworkPropertyMetadataOptions.AffectsParentArrange, 
        new PropertyChangedCallback( OnOffsetXChanged ) ) );

    public static readonly DependencyProperty OffsetYProperty = DependencyProperty.Register( 
      "OffsetY", typeof( double ), typeof( ControlAdorner ),
      new FrameworkPropertyMetadata( 0d, 
        FrameworkPropertyMetadataOptions.AffectsArrange |
        FrameworkPropertyMetadataOptions.AffectsParentArrange, 
        new PropertyChangedCallback( OnOffsetYChanged ) ) );
    #endregion
}

http://www.artfulbits.com/technologies/winfx/adorners.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM