WPF:在XAML中动画,而不是C#?

时间:2010-01-22 21:18:04

标签: wpf xaml animation wpf-controls

。我正在创建一个用户控件,它垂直堆叠三个WPF月份日历(Master,Slave1和Slave2)。我希望隐藏第二个和第三个日历,直到主机窗口足够大以显示整个月 - 没有部分日历。我已经实现了在代码隐藏中的事件处理程序中捕获SizeChanged事件的功能:

/// <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中实现该功能,我不知道该怎么做。有什么建议?我不是在找别人给我写这个 - 只是指出我正确的方向。谢谢你的帮助。

2 个答案:

答案 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/

答案 1 :(得分:1)

一个想法是创建一个新的面板类型,派生自Panel(或者StackPanel),例如IntegralClippingPanel。在该面板中,MeasureOverrideArrangeOverride的覆盖确保仅显示子元素,如果它们完全适合可用空间。