2017-10-27 13 views
0

을 변경 한 후 활성 유지하고 내 사용자 컨트롤 사이에서 변경하려면 다음 코드를 사용 이전 사용자 컨트롤은 내가 하나 개의 메인 창을 두 개의 사용자 컨트롤을 내 <code>WPF</code> 응용 프로그램에서 ContenControl 내용

private void SwitchControls(MyButton btnCurrent) 
    { 
     switch (btnCurrent.Name) 
     { 
      case "btnLine": 
       { 
        winLine win = new winLine(); 
        ccContent.Content = win; 
       } 
       break; 
      case "btnHistory": 
       { 
        winHistory win = new winHistory(); 
        ccContent.Content = win; 
       } 
       break; 
     } 
    } 

ccContent

내 ContentControl을하다 내 메인 윈도우 안에. winLinewinHistory은 내 두 개의 사용자 정의 컨트롤입니다. 내 winLine에는 매 5 초마다 Ticks 타이머가 있으며 이전의 사용자 컨트롤에서 winHistory 타이머로 전환 할 때마다 계속 똑딱 거리고 있습니다. 사용자 컨트롤을 전환하기 전에 ccContent.Content = null;을 시도했지만 도움이되지 않았습니다.

이전 사용자 컨트롤을 비활성화하거나 제거하고 활성 사용자 컨트롤을 유지하려면 어떻게합니까? 나는 나의 질문이 분명하기를 바랍니다.

+0

확인'content' 블록 속성 : 당신은 as 연산자를 사용 winLineContent 속성 값을 캐스팅하려고하여이 작업을 수행 할 수 있습니다. – Sinatr

+0

그게 내가하려는거야. 'Content'를 어떻게 지울 수 있습니까? –

+0

아마도 가장 쉬운 해결책은 간단히 ['언로드 '] (https://msdn.microsoft.com/en-us/library/system.windows.frameworkelement.unloaded (v = vs.110) .aspx)에 가입하는 것일 수 있습니다. 이벤트를 사용자 제어에서 타이머로 설정하고 타이머를 중지하십시오. – Sinatr

답변

0

Content 속성을 다시 설정하기 전에 타이머를 중지하고 처리하십시오. 새로운 무언가로 대체하기 전에

private void SwitchControls(MyButton btnCurrent) 
{ 
    winLine current = ccContent.Content as winLine; 
    if (current != null && current.Timer != null) 
    { 
     current.Timer.Stop(); 
     current.Timer.Dispose(); 
    } 

    switch (btnCurrent.Name) 
    { 
     case "btnLine": 
      { 
       winLine win = new winLine(); 
       ccContent.Content = win; 
      } 
      break; 
     case "btnHistory": 
      { 
       winHistory win = new winHistory(); 
       ccContent.Content = win; 
      } 
      break; 
    } 
}