2010-08-05 1 views
1

그래서 WPF/C# 값 변환기를 사용하는 습관이 생겼습니다. 나는 보통 단지 값 변환기를 위해 폴더를 설정하고 필요한 xaml 파일에 액세스한다.내 사용자 정의 컨트롤에서만 값 변환기에 액세스 할 수 있습니까? (WPF)

현재 다른 클래스에 액세스하지 못하게하려는 일부 값 변환기가있는 사용자 정의 컨트롤을 개발 중입니다. 즉, 값 변환기는 코드 숨김 파일에 존재하며 해당 파일과 연관된 xaml에서만 액세스 할 수 있어야합니다. 내 첫 번째 생각은 중첩 된 클래스로 코드 숨김 파일 안에 던져 버리는 것이지만 xaml 파일에서 중첩 된 클래스에 액세스하는 방법을 찾을 수 없습니다. 나는 올바른 방향으로 가고 있는가, 아니면 내가해야만 할 다른 것이 있는가?

저렴한 방법으로이 컨트롤을 자체 네임 스페이스에 넣을 수는 있지만 문제가 실제로 해결되지는 않습니다.

도움이나 조언을 주시면 감사하겠습니다. 감사!

public partial class MyControl: UserControl 
{ 
    //misc code for control 
    private class MyValueConverter : IMultiValueConverter 
    { 
     //conversion functions 
    } 
} 

내가 생각하고있는 것입니다 : 아래

내가 원하는 것을 대략이다.

은 일반적으로는 WPF에서 액세스 값 변환기 좋아 :

`<local:MyValueConverter x:Key="MyValueConverter" />` 

이 유일한 작품들이 같은 공간에있는 경우. 이 클래스가 중첩 된 클래스 인 경우이를 작동시키지 못합니다. valueconverter를이 사용자 정의 컨트롤에서만 볼 수있게하는 목표를 달성했지만 xaml 내에서 액세스하는 방법을 알지 못합니다.

내 문제는 xaml에서이 변환기에 액세스하고 있습니다.

답변

2

그것은 (그 이유에 대한 here 볼 - 요구 사항에 대한 두 번째 단락을) 할 수 없습니다

사용자 정의 클래스는 중첩 된 클래스가 될 수 없습니다. 중첩 된 클래스와 일반적인 CLR 사용 구문의 "점"은 연결된 속성과 같은 다른 WPF 및/또는 XAML 기능을 방해합니다.

당신은 그 주위 코스 작업의 수 -하지만, 코드 숨김에서 valueconverter (안 좋아요 :-)이다)

그래도, 궁금 설정에 왜 않을 것을 제한 다른 클래스에서 사용하고 싶습니까?

1

코드 숨김 파일에서 클래스 외부에 표시하지 않으려는 다른 메서드 나 속성처럼 변환기 코드가 포함 된 메서드를 private으로 표시하십시오. XAML과 코드 비하인드 파일은 기본적으로 동일한 클래스의 부분 표현이기 때문에 코드 비하인드 파일에서 선언 한 내용은 비공개 인 경우에도 해당 XAML 파일에 계속 표시됩니다.

+0

여전히 중첩 클래스로 유지한다고 가정합니다. xaml 리소스 사전에서 변환기를 선언하는 데 익숙합니다. 여기서 "local"은 변환기의 네임 스페이스와 같습니다. – brandon

+0

@brandon Ah. 나는 "값 변환기가 파일 뒤의 코드에 존재한다고 ..."라고 말했을 때 코드 숨김에 변환기를 선언했다고 생각했습니다. XAML에서 선언하는 경우 정확히 어떻게 할 것인지 잘 모르겠습니다.생성 된 코드를 XAML에서 확인하고 변환기의 보호 수준을 볼 수 있습니다. 이미 '비공개'또는 '보호 된'상태 일 수 있습니다. –

+0

모호한 점에 대해 사과드립니다. 원래 게시물을 편집하여 명확하게 처리하고 있습니다. – brandon