source

x:Reference와 ElementName의 차이점은 무엇입니까?

manysource 2023. 4. 10. 22:03

x:Reference와 ElementName의 차이점은 무엇입니까?

MSDN의 x:Reference Markup Extension 페이지에 따르면x:Reference

XAML 마크업으로 선언된 인스턴스를 참조합니다.참조는 요소의 x:Name을 참조합니다.

제본에 따라.MSDN의 [Element Name Property]페이지,ElementName

Name 속성 값 또는 관심 요소의 x:Name 지시어 값.

첫 페이지의 비고 섹션을 다시 살펴봅니다.

x: 레퍼런스 및 WPF

WPF 및 XAML 2006에서는 요소 참조는 ElementName 바인딩의 프레임워크레벨 기능에 의해 처리됩니다.대부분의 WPF 응용 프로그램 및 시나리오에서는 ElementName 바인딩을 계속 사용해야 합니다.이 일반적인 지침의 예외에는 데이터 바인딩이 실용적이지 않고 마크업 컴파일이 포함되지 않는 데이터 컨텍스트 또는 기타 범위 지정 고려사항이 있을 수 있다.

'비고하다'의 설명하겠습니다.ElementName 링크:

이 속성은 응용 프로그램의 다른 요소의 속성에 바인딩하려는 경우에 유용합니다.예를 들어, 슬라이더를 사용하여 응용 프로그램에서 다른 컨트롤의 높이를 제어하거나 컨트롤의 내용을 ListBox 컨트롤의 SelectedValue 속성에 바인딩하려는 경우입니다.

이제 '는 잘 , '언제 쓸지'는 잘 있습니다.ElementName를 완전히 하지 못한다, property property 、 는 property 、 는 property 、 property property 、 property property 、 property property property property property property 。x:Reference분, 설명해주실 수 ?그리고 . 특히, 마지막 문장을 확대해주시면 됩니다.x:Reference 고 : :

이 일반적인 지침의 예외에는 데이터 바인딩이 실용적이지 않고 마크업 컴파일이 포함되지 않는 데이터 컨텍스트 또는 기타 범위 지정 고려사항이 있을 수 있다.

기본적으로 당신이 말한 것처럼 그 둘은 거의 같은 일을 합니다.그러나 후드 아래에는 작은 차이가 있습니다.

{x:Reference ...} 두 의 "브릿지 수합니다.-> "브릿지"는 "브릿지"로 사용할 수 없습니다.그 이면에는 특정 범위(통상은 창 자체)에서 지정된 이름을 검색하는 서비스가 사용되고 있습니다.

{Binding ElementName="..." }-> 먼저 바인딩 오브젝트를 작성한 후 오브젝트 이름을 검색하지만 x:Reference와 같은 기술을 후드 아래에 사용하여 검색하지 않습니다.검색 알고리즘이 VisualTree에서 위아래로 이동하여 원하는 요소를 찾습니다.따라서 항상 기능하는 Visual Tree가 필요합니다.예를 들어 Non-UiElement 내에서 사용하면 작동하지 않습니다.결국 바인딩은 남아서 매일 빵을 먹는다.

이렇게 하면 안 돼요.

<StackPanel>
 <Button x:name="bttn1" Visibility="Hidden">Click me</Button>
 <DataGrid>
  <DataGrid.Columns>
    <DataGridTextColumn Visibility="{Binding ElementName=bttn1, Path=DataContext.Visibility}"/>
 ....

이 방법은 다음과 같습니다.

<StackPanel>
 <Button x:name="bttn1" Visibility="Hidden">Click me</Button>
 <DataGrid>
  <DataGrid.Columns>
    <DataGridTextColumn Visibility="{Binding Source={x:Reference bttn1}, Path=DataContext.Visibility}"/>
 ....

그런 셈이죠:)

ElementName플랫폼 고유합니다.즉, 사용하고 있는 플랫폼에 따라서는 존재하거나 존재하지 않을 수 있습니다. x:Reference는 이 개념을 XAML 네이티브 기능으로 업그레이드합니다.따라서 XAML을 지원하는 플랫폼은x:Reference.

2023년을 기점으로 상황이 변한 것 같아요MS x:Reference Markup Extension 페이지에 다음과 같이 표시됩니다.x:Reference 컴파일된 WPF 파일에서는 사용할 수 없습니다.

x:Reference는 XAML 2009에서 정의된 구성입니다.WPF에서는 XAML 2009 기능을 사용할 수 있지만 WPF 마크업 컴파일되지 않은 XAML에만 사용할 수 있습니다.마크업 컴파일된 XAML 및 XAML의 BAML 형식은 현재 XAML 2009 언어 키워드 및 기능을 지원하지 않습니다.

그렇게x:ReferenceVS의 빌드 액션 속성에 대해 "페이지"로 설정된 XAML 파일(또는 "컴파일" 및 기타로 설정됨)에서는 피해야 합니다.

예를 들어 MainWindow.xaml의 빌드 액션은 새로운 WPF 프로젝트에서 기본적으로 "페이지"로 설정됩니다.

언급URL : https://stackoverflow.com/questions/19244111/what-is-the-difference-between-xreference-and-elementname