。我正在创建一个用户控件,它垂直堆叠三个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中实现该功能,我不知道该怎么做。有什么建议?我不是在找别人给我写这个 - 只是指出我正确的方向。谢谢你的帮助。
答案 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
。在该面板中,MeasureOverride
和ArrangeOverride
的覆盖确保仅显示子元素,如果它们完全适合可用空间。