programing

WPF에서 x:Name 속성과 Name 속성의 차이점은 무엇입니까?

magicmemo 2023. 4. 11. 21:56
반응형

WPF에서 x:Name 속성과 Name 속성의 차이점은 무엇입니까?

때로, 람 sometimes sometimes sometimes 가 있는 것처럼 수 있습니다.Name ★★★★★★★★★★★★★★★★★」x:Name아트리뷰트

그렇다면 이들 간의 명확한 차이점은 무엇이며, 어떤 경우에 하나를 사용하는 것이 더 좋을까?

잘못된 방법으로 사용할 경우 성능이나 메모리가 영향을 미칩니까?

XAML에는 XAML이라는 .x:Name 중 수 x:NameRuntimeNamePropertyAttribute 중 것으로 하는 클래스.

그 이유는 WPF와 같이 런타임에 이미 "Name" 개념이 있는 프레임워크를 허용하기 위해서입니다.WPF에서는 "WPF"라고 합니다.FrameworkElement이름을 대라

.x:Name사용할 수 있습니다. ★★★★★x:Name to 은 classmeas to XAML의 합니다.이 매핑에서 실행 시 수행하는 작업은 프레임워크에 따라 달라집니다.

그렇다면, 왜 같은 일을 하는 두 가지 방법이 있을까요?간단한 답은 하나의 속성에 두 가지 개념이 매핑되어 있기 때문입니다.WPF에서는 런타임에 요소의 이름이 유지되어야 합니다(Bind 등을 통해 사용할 수 있습니다).XAML은 클래스 뒤의 코드에 있는 필드에서 액세스할 수 있는 요소를 알아야 합니다.WPF는 Name 속성을 x:Name의 에일리어스로 표시함으로써 이들 2개를 결합합니다.

앞으로 XAML은 이름으로 다른 개체를 참조하여 속성을 설정할 수 있는 등 x:Name에 더 많이 사용될 것입니다. 그러나 3.5 이전 버전에서는 필드 작성에만 사용됩니다.

둘 중 하나를 사용해야 하는지 다른 하나를 사용해야 하는지 여부는 기술적인 질문이 아니라 실제로 스타일 질문입니다.저는 그것을 다른 사람에게 추천을 맡깁니다.

AutomationProperties도 참조하십시오.이름 VS x:Name, AutomationProperties.이름은 내게 필요한 도구 및 일부 테스트 도구에서 사용됩니다.

그것들은 같은 것이 아니다.

x:Name는 주로 요소를 참조하기 위해 사용되는 xaml 개념입니다.에 xAtribute를 하면 "된 x:Name xaml Atribute", "x:Name xaml Atribute"가 됩니다.x:Namexaml이 처리되면 기본 코드로 작성되는 필드의 이름이 됩니다.이 필드는 오브젝트에 대한 참조를 유지합니다.(MSDN) 즉, 설계자가 생성한 필드이며 기본적으로는 내부 액세스 권한이 있습니다.

Name 、 の property property property of of of of of of of of of of of의 입니다.FrameworkElementxaml Attribute의 wpf입니다.

은 「이러다」, 「이러다」를 의미하기도 합니다.x:Name는, 보다 폭넓은 오브젝트에 사용할 수 있습니다.이것은 xaml 내의 모든 것을 지정된 이름으로 참조할 수 있도록 하는 기술입니다.

x:이름과 이름이 서로 다른 네임스페이스를 참조하고 있습니다.

x:name은 Xaml 파일 상단에 기본적으로 정의되어 있는x 네임스페이스에 대한 참조입니다.

xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

이름만 말하면 이름 공간 아래의 기본값을 사용합니다.

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

x:이름에서 x 별칭이 있는 네임스페이스를 사용하라고 합니다.x가 디폴트이고 대부분의 사용자는 그대로 두지만 원하는 대로 변경할 수 있습니다.

xmlns:foo="http://schemas.microsoft.com/winfx/2006/xaml"

따라서 foo:name을 참조해 주십시오.

WPF에서의 네임스페이스 정의 및 사용


좋아요, 다른 시각으로 생각해 봅시다.Xaml 페이지에 버튼을 드래그 앤 드롭한다고 칩시다.이 두 가지 방법으로 x:name과 name을 참조할 수 있습니다.모든 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"는 여러 네임스페이스에 대한 참조입니다.xamlControl 네임스페이스(100%가 아님)를 보유하며 프레젠테이션은 FrameworkElement를 보유하며 Button 클래스는 다음 상속 패턴을 가집니다.

Button : ButtonBase
ButtonBase : ContentControl, ICommandSource
ContentControl : Control, IAddChild
Control : FrameworkElement
FrameworkElement : UIElement, IFrameworkInputElement, 
                    IInputElement, ISupportInitialize, IHaveResources

FrameworkElement에서 상속받은 모든 것이 해당 공용 속성에 액세스할 수 있습니다.따라서 Button의 경우 계층 트리의 맨 위에 있는 FrameworkElement에서 Name 속성을 가져옵니다.따라서 x:Name 또는 Name이라고 말하면 둘 다 FrameworkElement에서 getter/setter에 액세스합니다.

MSDN 레퍼런스

WPF는 여러 CLR 네임스페이스를 단일 XML 네임스페이스에 매핑하기 위해 XAML 프로세서가 사용하는 CLR 속성을 정의합니다.XmlnsDefinitionAttribute 속성은 어셈블리를 생성하는 소스 코드의 어셈블리 수준에 배치됩니다.WPF 어셈블리의 소스 코드는 이 속성을 사용하여 시스템 등의 다양한 공통 네임스페이스를 매핑합니다.Windows 및 시스템창문들.컨트롤, http://schemas.microsoft.com/winfx/2006/xaml/presentation 네임스페이스로 이동합니다.

어셈블리 속성은 다음과 같습니다.

Presentation Framework.dll - XmlnsDefinitionAttribute:

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Data")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Navigation")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Shapes")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Documents")]

[assembly: XmlnsDefinition("http://schemas.microsoft.com/winfx/2006/xaml/presentation", "System.Windows.Controls")]  

둘 다 같은 것으로 많은 프레임워크 요소가 이름 속성을 노출하지만, 그렇지 않은 경우에는 x:name을 사용할 수 있습니다. 저는 보통 x:name만 사용합니다. 왜냐하면 x:name은 모든 것에 적용되기 때문입니다.

컨트롤은 종속성 속성을 내부적으로 사용해야 하므로 이름을 종속성 속성으로 노출하거나 표시하지 않을 수 있습니다.

자세한 내용은 msdn을 참조하십시오.

FrameworkElement/FrameworkContentElement 등 중요한 기본 클래스의 WPF 네임스페이스 내에서 지정된 이름 종속 속성이 동일한 목적을 충족하기 때문에 일부 WPF 프레임워크레벨 어플리케이션에서는 x:Name Atribute의 사용을 회피할 수 있습니다.이름 속성이 없는 요소에 대한 코드 액세스가 필요한 일반적인 XAML 및 프레임워크 시나리오가 있습니다. 특히 특정 애니메이션 및 스토리보드 지원 클래스에서 가장 두드러집니다.예를 들어 XAML에서 작성된 타임라인 및 변환을 코드에서 참조하려면 x:Name을 지정해야 합니다.

Name을 클래스에서 속성으로 사용할 수 있는 경우 Name과 x:Name을 속성으로 서로 바꿔 사용할 수 있지만 둘 다 동일한 요소에 지정되면 오류가 발생합니다.

X: 사용자 정의 컨트롤이 있는 경우 이름으로 인해 메모리 문제가 발생할 수 있습니다.NameScope 엔트리의 메모리 위치를 유지합니다.

x:Name은 꼭 사용해야 하는 경우가 아니면 사용하지 마십시오.

이름:

  1. FrameworkElement 및 FrameworkContentElement의 하위에만 사용할 수 있습니다.
  2. SetValue()를 통해 코드 배후에 설정할 수 있으며 속성과 유사합니다.

x: 이름:

  1. 거의 모든 XAML 요소에 사용할 수 있습니다.
  2. SetValue()를 통해 코드 배후에 설정할 수 없습니다.명령어이므로 오브젝트의 속성 구문을 사용해야만 설정할 수 있습니다.

1개의 FrameworkElement 또는 FrameworkContentElement에 대해 XAML의 양쪽 디렉티브를 사용하면 예외가 발생합니다.XAML이 컴파일된 경우 예외는 마크업 컴파일로 발생하고 그렇지 않은 경우 로드 시 발생합니다.

유일한 차이점은 사용자 컨트롤을 동일한 어셈블리의 컨트롤로 사용하는 경우, Name은 컨트롤을 식별하지 않고 "Use x:Name for controls in the same Assembly" 오류가 발생한다는 것입니다.따라서 x:Name은 WPF의 이름 지정 제어 WPF 버전입니다.이름은 Winform Legacy로 사용됩니다.이들은 Xaml의 속성을 사용하여 컨트롤의 이름에 x:를 사용한 다른 어셈블리와 컨트롤을 식별하기 위해 WPF와 winform의 컨트롤 이름을 구별하려고 했습니다.

컨트롤은 메모리에 공백으로 저장되므로 컨트롤 이름을 입력하지 마십시오.이 경우 컨트롤에 이름이 적용되었지만 사용되지 않았다는 경고가 표시됩니다.

x:Name의미: 이 오브젝트에 대한 참조를 보유하기 위해 코드 뒤에 필드를 만듭니다.

Name이 을 설정합니다.

저는 항상 x:Name 변종을 사용합니다.이것이 퍼포먼스에 영향을 미치는지는 모르겠지만, 다음과 같은 이유로 더 쉬워졌습니다.다른 어셈블리에 있는 사용자 컨트롤이 있는 경우 "이름" 속성만으로는 충분하지 않습니다.따라서 x:Name 속성도 쉽게 고정할 수 있습니다.

이것은 WPF 항목이 아니라 표준 XML 항목이며 BtBh가 올바르게 응답했습니다.x 는 기본 이름 공간을 나타냅니다.XML에서는 요소/속성에 이름 공간을 접두사로 붙이지 않으면 기본 이름 공간을 사용하는 것으로 가정합니다.그래서 타이핑만 하면 돼.Name이 짧다x:NameXML 네임스페이스에 대한 자세한 내용은 링크 텍스트를 참조하십시오.

지정된 x:Name은 XAML이 처리될 때 기본 코드에 작성된 필드의 이름이 되며 이 필드에는 개체에 대한 참조가 저장됩니다.Silverlight에서는 관리 대상 API를 사용하여 이 필드를 작성하는 프로세스가 MSBuild 타깃스텝에 의해 실행됩니다.MSBuild 타깃스텝은 XAML 파일의 부분 클래스 및 코드 배후에 대한 참여도 담당합니다.이 동작은 반드시 XAML 언어로 지정되어 있는 것은 아닙니다.이것은 Silverlight가 프로그래밍 및 응용 프로그램모델에서 x:Name을 사용하기 위해 적용하는 특정 구현입니다.

MSDN 상세보기...

XAML에서 Button 요소를 선언하는 경우 Windows 실행 시간에 정의된 Button이라는 클래스를 참조합니다.

버튼에는 배경, 텍스트, 여백 등 많은 속성과 이름이라는 속성이 있습니다.

XAML에서 버튼을 선언하면 Name이라는 Atribut을 가진 어나니머스 오브젝트를 작성하는 것과 같습니다.

일반적으로 어나니머스 오브젝트를 참조할 수 없지만 WPF 프레임워크에서는 XAML 프로세서를 사용하면 Name Atribut에 지정한 값에 따라 해당 오브젝트를 참조할 수 있습니다.

아직까지는 좋아.

개체를 만드는 또 다른 방법은 익명 개체 대신 명명된 개체를 만드는 것입니다.이 경우 XAML 네임스페이스에는 Name이라는 객체의 Atribute가 있습니다(또한 XAML 네임스페이스에 있기 때문에 X:가 있습니다).이 Atribute는 객체를 식별하고 참조할 수 있도록 설정할 수 있습니다.

결론:

Name은 특정 객체의 속성이지만 X:Name은 해당 객체의 속성 중 하나입니다(일반 객체를 정의하는 클래스가 있습니다).

그 중 하나는 x:name을 c#과 같은 다른 프로그램 언어로 사용하고 name을 프레임워크에 사용하는 것입니다.솔직히 나한테는 그렇게 들린다.

저의 연구는x:Name글로벌 변수로 지정합니다.하지만,Name로컬 변수로 지정합니다.즉, XAML 파일 내의 임의의 위치에 이름을 붙일 수 있지만 이름은 그렇지 않음을 의미합니다.
예:

<StackPanel>
<TextBlock Text="{Binding Path=Content, ElementName=btn}" />
<Button Content="Example" Name="btn" />
</StackPanel>
<TextBlock Text="{Binding Path=Content, ElementName=btn}" />

그럴수는 없어요.Binding소유물ContentButton이름이 'btn'인 것은 외부에 있기 때문입니다.StackPanel

Name내부 텍스트와 함께 속성 요소 구문을 사용하여 설정할 수도 있지만 이는 일반적이지 않습니다.그에 반해서,x:Name할 수 XAML구문 ""를 사용한 내SetValue; 명령어이기 때문에 오브젝트의 속성 구문을 사용해야만 설정할 수 있습니다.
ifName할 수 있습니다.Name ★★★★★★★★★★★★★★★★★」x:Name는 Atribute로 교환하여 사용할 수 있지만 둘 다 같은 요소에 지정되어 있는 경우 해석 예외가 발생합니다.XAML이 마크업 컴파일 되어 있는 경우, 예외는 마크업 컴파일로 발생합니다.그렇지 않은 경우는 로드시에 발생합니다.

언급URL : https://stackoverflow.com/questions/589874/in-wpf-what-are-the-differences-between-the-xname-and-name-attributes

반응형