문제

NB이 질문이 업데이트되었습니다. 자세히 읽으십시오.

안녕,

각각 4 개의 하위 메뉴가있는 사용자 정의 컨텍스트 메뉴 (각각 왼쪽 상단, 오른쪽 상단, 왼쪽, 오른쪽 하단)를 만들고 싶습니다. 3DS Studio Max와 유사합니다.

이것이 지금까지 문제에 접근 한 방법입니다 .- ContextMenu에서 파생 된 사용자 정의 WPF 컨트롤을 작성하십시오 [1
- ContextMenu의 4 개의 종속성 속성을 선언하면 메뉴가 표시되며 XAML에서 설정할 수 있습니다.
- 컨텍스트 menu.isopenproperty의 추가 소유자, 속성이 변경된 알림을 추가합니다.
- Isopen 속성이 변경되면 4 개의 아동 컨텍스트 메뉴의 Isopen 속성을 설정합니다.
- 컨텍스트 menuservice 사용 컨텍스트 메뉴의 수직 및 수평 오프셋을 설정하여 각 사분면에 나타납니다. 오프셋을 계산하기 위해 실제 높이 및 너비 특성을 바인딩합니다.

1] 컨텍스트 메뉴에서 파생되어야합니다. 그렇지 않으면 창의 컨텍스트 메누 속성에 할당 할 수 없습니다.

이것 나타납니다 작동하려면 메뉴에 문제가 있습니다 아니다 계속 열려 있습니다 (초점이 메뉴 외부에 있으므로 폐쇄되고 있습니다).

이것은 내가 쓰려고 시도한 첫 번째 맞춤형 WPF 컨트롤입니다. 이것이 최선의 접근 방식인지 확실하지 않습니다.

이 쿼드 컨텍스트 메뉴를 만드는 방법에 대한 제안/아이디어가 있습니까?

도움이 되었습니까?

해결책 2

업데이트

확인. 커스텀 컨트롤을 가지고 노는 후에는 무언가가 있습니다. 일하고 있는 전보다 더 나아진. 모든 메뉴는 이제 계속 열려 있습니다.

내가 한 것:
- ContextMenu에서 파생 된 QuadContextMenu라는 사용자 정의 컨트롤을 작성하여 기본 스타일 키를 무시합니다.
- 컨트롤 스타일에는 4 개의 팝업 프리미티브가 있습니다.
- 각각 part_ name이 있으므로 onapplytemplate 일 때 그들에 대한 참조를 얻습니다.
- 각각에는 메뉴 바제에서 파생되는 맞춤형 제어입니다.
- 각각은 아동의 실제 상점과 실제 전체에 바인딩되는 verticleoffset 및 horizontaloffset 속성을 가지고 있습니다 [2].

Quadmenu 스타일/제어 템플릿 :
- 도크 패널과 고전적인 테두리가 있으며 메뉴 이름을 넣을 텍스트 블록이있는 테두리가 있습니다.

2] 메뉴를 쿼드에 배치하는 방법 : - 대비는 실제 너비와 높이를 오프셋합니다.
- 상단은 실제 높이보다 음수입니다
- 바닥은 실제 높이보다 음수 오프셋입니다
- 바닥은 아니다 오프셋 및 원래 위치에 있습니다

alt text

새로운 질문/문제

이것이이 제어를위한 다음 과제입니다.
1. 현재 키보드와 마우스는 첫 번째 메뉴에 의해 잠겨/캡처되며 다른 메뉴는 호버링하여 사용할 수 없습니다. 즉, 메뉴 1 개만 사용할 수 있습니다.
2. Menuitem을 뒤집어 왼쪽에서 하위 메뉴가 열리도록합니다.

getContainerForitemOverride 메소드를 재정의하여 QuadMenuitem을 반환하여 이미 메뉴 항목을 교체하려고 시도했습니다. quadmenuitem은 menuitem에서 파생 된 사용자 정의 컨트롤입니다. 그러나이 작업을 수행 할 때 실망스러운 하위 메뉴 기능을 잃습니다.

이러한 문제를 해결하는 방법에 대한 팁/트릭/제안이 있으면 대단히 감사하겠습니다! : D 감사합니다

다른 팁

나는 두 가지 접근법을 생각할 수 있습니다. 어느 것도 반드시 깨끗하지는 않지만 시간이 있으면 일할 수있는 잠재력이 없습니다.

접근 1

컨텍스트 메뉴를 사용하지만 템플릿을 설정함으로써 컨텍스트 메누가 실제로 다른 창을 열 수있는 컨트롤을 표시하도록하십시오. 아마도이 2 차 메뉴를 여는 것이 초점을 맞추지 않도록 트릭을 수행 할 수 있습니다. 결국 원래의 문제가 발생할 수 있습니다.

접근 2

contextmenu.staysopen을 false로 설정 한 다음 메뉴가 자신을 닫을 때 제어하려고 시도하면 어떻게됩니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top