2010-07-29 5 views
1

UserControl을 개발 중이며 CoolControl이라고 부릅니다.이 컨트롤은 창과 같이 약간의 특수 기능을 사용하여 작동하도록되어 있습니다. 지금까지는 화면 전체에서 크기를 조정하고 끌 수 있습니다. XAML을 사용하여 여러 CoolControl 개체를 내 응용 프로그램 창에 추가하면 마지막에 선언 된 마지막 개체가 항상 앞에 있습니다. 괜찮습니다.하지만 런타임 중에 CoolControl 객체 중 하나를 클릭하면 해당 컨트롤이 다른 모든 컨트롤 앞에 놓 이도록하고 싶습니다.WPF UserControl에 대한 BringToFront 메서드를 작성하려면 어떻게해야합니까?

저는 Canvas.SetZIndex을 사용해 보았습니다. 그러나 단순히 충분히 똑똑한 해결책을 제시 할 수 없으면 어떻게 도움이되는지 알지 못합니다. 하나의 컨트롤의 Z- 인덱스를 9999로 설정하면 다른 컨트롤을 클릭 할 때마다 9999와 동일한 값을 갖기 때문에 컨트롤이 마지막으로 끝납니다.

누군가의 UserControl에 대해 BringToFront() 메서드를 작성하는 작업을 수행 한 경우 가능한 가장 간단한 방법으로 어떻게 처리합니까? 모든 컨트롤을 반복하면서 최대 Z- 인덱스를 찾은 다음 부모 컨트롤 창을 얻는 것보다 더 나은 솔루션을 선호합니다. 그럴 경우 올바른 솔루션 인 경우 CoolControl의 Z- 인덱스를 적절히 설정하십시오.

+0

오버레이를 들여다 보았습니까? 어쩌면 꾸미는 사람? – SteveCav

+0

태그에 "C#"과 같은 태그를 유지하고 제목에서 제외하십시오. 감사. –

답변

3

나는 Canvas.SetZIndex 방법에 익숙하지 않습니다. 그것은 일종의 첨부 된 속성이나 행동처럼 보입니다.

논리를 제공하여 z- 인덱스를 설정할 수 있다면, 인스턴스를 추적하고 z- 인덱스를 관리하고 선택/생성 된 순서대로 유지하는 방법을 간략히 설명했습니다.

public class CoolControl : UserControl 
{ 

    public CoolControl() 
    { 
     InitializeComponent(); 
     Instances.Add(this); 
    } 

    static IList<CoolControl> Instances = new List<CoolControl>(); 

    void SelectThisInstance() 
    { 
     foreach(var instance in Instances) 
     { 
      // decrement z-index instance 
     } 

     // set z-index of this instance to show at top 
    } 
} 
+0

Jay, 고맙습니다. 나는 그것을 시험해 보았지만 효과가 있었지만 실제로는 내가 바라는 해결책이 아니었다. 왜냐하면이 목록에 추가되지 않은 컨트롤 (누군가 다른 사람이 만든 표준 컨트롤이나 사람이 그의 창에 포함시키는 컨트롤)을 가지고 있기 때문이다. 나는 아직도 나의 통제가 정상에 뛰어 오를 것을 원할 것이다. 모든 컨트롤에서 작동하는 BringToFront() 함수와 같아야합니다. 정적리스트를 사용하는 것을 피하는 해결책이 있습니까? – Dalal

+0

@Dalal 모든 컨트롤을 참조하거나 모든 컨트롤을 이벤트에 가입시키지 않고도 할 수있는 방법을 생각할 수는 없습니다. 적어도 Z 스택의 깊이를 유지하는 방법은 아닙니다. 선택의 역사. 당신은 "ContentControl"을 투명하게 만들고 이것을 선택한 컨트롤을 움직이면 "가짜"수 있습니다. 그러나 그것은 지저분 해집니다. (원래 컨트롤로 다시 보내려합니다.) 그리고 나는 그것이 엉망이 될 것이라고 확신합니다. 기존 끌어서 놓기/크기 조정/etc. 기능. – Jay

+0

아, 알겠습니다. 나는이 솔루션이 잘 작동한다고 생각한다. 고마워. – Dalal

관련 문제