2010-01-22 5 views
0

. 3 개의 WPF 월 달력 (Master, Slave1 및 Slave2)을 세로로 스택하는 사용자 정의 컨트롤을 만듭니다. 호스트 창이 충분히 커서 전체 일정을 표시 할 때까지 두 번째 및 세 번째 달력을 숨기고 싶습니다. 부분 일정은 없습니다. 나는 코드 숨김에서 이벤트 처리기에서 SizeChanged 이벤트를 발생 트래핑 할 기능을 구현 한 : 그것은 잘 작동WPF : C#이 아닌 XAML로 애니메이션?

/// <summary> 
/// Shows only complete calendars--partially visible calendars are hidden. 
/// </summary> 
private void OnSizeChanged(object sender, SizeChangedEventArgs e) 
{ 
    // Increasing window height 
    var newHeight = e.NewSize.Height; 
    if (newHeight > 500) 
    { 
     SlaveCalendar1.Visibility = Visibility.Visible; 
     SlaveCalendar2.Visibility = Visibility.Visible; 
    } 
    else if (newHeight > 332) 
    { 
     SlaveCalendar1.Visibility = Visibility.Visible; 
     SlaveCalendar2.Visibility = Visibility.Hidden; 
    } 
    else 
    { 
     SlaveCalendar1.Visibility = Visibility.Hidden; 
     SlaveCalendar2.Visibility = Visibility.Hidden; 
    } 
} 

,하지만 난 오히려 XAML에서이 기능을 구현하는 것이, 나는 그것을 할 방법을 모르겠습니다. 어떤 제안? 나는 나를 위해 이것을 쓰는 다른 누군가를 찾고 있지 않다. 나는 올바른 방향으로 나를 가리킨다. 당신의 도움을 주셔서 감사합니다.

+0

나는 왜 당신이 nportelli의 답을 "최고"라고 표시했는지에 대해 의아하게 생각합니다. 실제로는 작동하지 않을 방향으로 당신을 인도합니다. Aviad P.의 아이디어는 실제로 작동 할 것이고 다소 우아 할 것입니다. –

+0

Aviad P의 솔루션으로 문제가 해결되지 않았습니다. 이미 작동하는 코드 솔루션이 있습니다. XAML 솔루션을 찾고 있습니다. –

+0

재사용 할 수없고 특정보기에 맞게 조정 가능한 코드 숨김 솔루션이 있으며 모든보기에 적합하고 재사용 가능한 코드 솔루션이 있습니다. –

답변

1

xaml 템플릿 및 트리거를 사용하여이 작업을 수행 할 수 있어야합니다. OnSizeChanged 이벤트에 대한 이벤트 트리거 일 수 있습니다. 나는 믿는다

다음은 올바른 방향을 가리킬 수있는 몇 가지 자료입니다.

http://msdn.microsoft.com/en-us/library/cc294856%28Expression.30%29.aspx http://www.wpfdude.com/articles/Triggers.aspx http://www.geektieguy.com/2008/01/05/wpf-controltemplate-trigger-tip/

+0

링크가 재미 있지만 답변이 잘못되었습니다. 트리거는 숫자 비교를 수행 할 수 없기 때문에 순수한 XAML에서 문제를 해결할 수 없습니다. 이것에 대한 좋은 해결책에 대한 Aviad P.의 대답을보십시오. –

+0

야당에게 좋은 일이 당신이 찾고있는 것을 따라 더 많을 수 있습니다. http://andyonwpf.blogspot.com/2007/02/how-small-can-you-go-part-ii.html – nportelli

1

하나의 아이디어는 예를 IntegralClippingPanel 호출됩니다 Panel (또는 어쩌면 StackPanel)에서 파생 된 새로운 패널 유형을 만드는 것입니다. 해당 패널의 우선 적용 크기가 MeasureOverrideArrangeOverride 인 경우 하위 요소가 사용 가능한 공간 전체에 맞게 표시되어야합니다.