programing

종속성 속성.등록() 또는 .첨부() 등록

subpage 2023. 6. 3. 08:28
반응형

종속성 속성.등록() 또는 .첨부() 등록

둘 사이의 차이점은 무엇입니까, 언제가 아니라 Register Attached()를 사용해야 합니까?등록()?

종속성 속성을 말씀하신 것 같습니다.등록 및 종속성 속성.레지스터가 첨부되었습니다.

종속성 속성.레지스터는 일반 종속성 속성을 등록하는 데 사용됩니다.WPF의 데이터 바인딩, 애니메이션 등에 참여할 수 있는 트위스트가 추가된 일반 속성으로 볼 수 있습니다.실제로 이들은 입력되지 않은 종속성 개체 위에 일반 속성(get 및 set 액세스 권한이 있는 경우)으로 노출됩니다.SetValue / GetValue를 선택합니다.사용자는 이를 유형의 일부로 선언합니다.

반면에 첨부된 속성은 다릅니다.확장성 시스템을 의미합니다.Windows Forms에서 Extender를 사용해 본 적이 있는 경우에는 Extender와 유사합니다.사용자는 다른 유형에서 사용할 유형의 일부로 선언합니다.

레이아웃 관련 정보에 많이 사용됩니다.예를 들어, Canvas에는 왼쪽/위 좌표가 필요하고, Grid에는 행과 열이 필요하며, Dock Panel에는 Dock 정보 등이 필요합니다.배치할 수 있는 모든 컨트롤에 이 모든 것을 선언해야 한다면 혼란스러울 것입니다.따라서 해당 패널에서 선언되지만 모든 컨트롤에서 사용됩니다.

필요한 경우 동일한 방법을 사용하여 종속성 개체에 정보를 첨부할 수 있습니다.예를 들어 xaml에서 설정할 수 있는 정보의 일부를 선언하는 것이 유용할 수 있습니다. 단지 나중에 기존 클래스의 스타일로 사용됩니다.

따라서 이 두 종류의 종속성 속성은 매우 다른 용도로 사용됩니다.Register()를 통해 등록된 일반 속성은 유형 인터페이스의 일부로 일반 속성과 마찬가지로 사용됩니다.첨부된 속성(첨부된 레지스터()를 통해 등록됨)은 기존 클래스의 확장성 점으로 사용됩니다.

그것이 그것을 조금 명확하게 해주길 바랍니다.

종속성 속성 간의 차이입니다.레지스터() 및 종속성 속성.Register Attached()는 다음과 같습니다.레지스터()는 종속성 개체에 '일반' 종속성 속성을 등록하는 데 사용됩니다.RegisterAttached()는 'attached' 종속성 속성을 설정하는 데 사용됩니다.

두 가지 유형의 종속성 속성 간의 차이는 상당히 간단합니다. 일반 종속성 속성은 다른 .NET 속성과 마찬가지로 특정 종속성 개체에 설정됩니다.그러나 연결된 속성은 특정 종속성 개체(예: 그리드)와 연결되지만 완전히 별도의 종속성 개체(예: 그리드)에 설정됩니다.연결된 속성인 행은 상위 그리드의 하위에 설정됩니다.

첨부된 속성에 대한 자세한 내용은 MSDN에 있습니다.

Register 또는 RegisterAttached에 등록된 속성은 SetValue 및 GetValue를 사용하여 모든 종속성 개체에 연결할 수 있습니다.그러나 ownerType 이외의 유형의 개체에 Register에 등록된 속성을 첨부하면 해당 메타데이터가 사용되지 않습니다(기본값 제외).즉, Inherit 또는 AffectsMeasure와 같은 속성은 이러한 속성에 대해 작동하지 않습니다.연결된 속성의 메타데이터에 관심이 있는 경우 연결된 등록을 사용해야 합니다.

자세한 내용은 유사한 질문에 대한 내 대답: Silverlight의 연결된 종속성 속성과 연결되지 않은 종속성 속성의 차이를 참조하십시오.

내 경우에는RegisterAttached경계 필드를 한 번만 설정하는 동안Register의도한 대로 동적으로 작동합니다.

목록의 버튼이 마우스 호버에서 미리 보기를 표시해야 하는 시나리오에서 가져온 것입니다.CommandParam이미 찍혔습니다.

public static DependencyProperty MouseCommandParamProperty = DependencyProperty.Register(
                                                                        "MouseCommandParam",
                                                                        typeof(object),
                                                                        typeof(MouseBehaviour),
                                                                        new PropertyMetadata(defaultValue:null, new PropertyChangedCallback(MouseCommandParamChanged)));
        public static void SetMouseCommandParam(DependencyObject target, object value)
        {
            target.SetValue(MouseBehaviour.MouseCommandParamProperty, value);
        }
        public static object GetMouseCommandParam(DependencyObject target)
        {
            return (object)target.GetValue(MouseBehaviour.MouseCommandParamProperty);
        }
        private static void MouseCommandParamChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
        {
            UIElement element = target as UIElement;
            if (element != null)
            {
                element.SetValue(MouseBehaviour.MouseCommandParamProperty, e.NewValue);
            }
        }

언급URL : https://stackoverflow.com/questions/910579/dependencyproperty-register-or-registerattached

반응형