[英]Calendar Control in WPF weird behavior
我正在嘗試綁定日歷的“DisplayDate”,以便在日期發生變化時通知控件。
這是我的xaml
<Window x:Class="CalenderControl.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<Calendar x:Name="_calendar" DisplayMode="Year" DisplayDate="{Binding Display}"/>
</Grid>
</Window>
和我的ViewModel
public class ViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string PropertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(PropertyName));
}
private DateTime _displayDate;
public DateTime Display
{
get { return _displayDate; }
set { _displayDate = value; OnPropertyChanged("Display"); }
}
}
情況1:
畢竟這一切。 我已經使用viewmodel分配了datacontext。
public MainWindow()
{
InitializeComponent();
this.DataContext = new ViewModel() { Display = DateTime.Parse("10/10/2015") };
}
這是它在綁定后的樣子。
案例2:
然后,我試着沒有使用ViewModel分配DataContext。
public MainWindow()
{
InitializeComponent();
// --- Commenting out ---
//this.DataContext = new ViewModel() { Display = DateTime.Parse("10/10/2015") };
}
這是它沒有綁定的樣子
為什么在分配DataContext時寬度變得奇怪? 有什么我做錯了。 。
由於未知原因,該問題似乎與DisplayMode="Year"
我可以建議你做以下步驟,似乎在我的測試應用程序中工作。
1)從Xaml中刪除DisplayMode 2)設置DataContext后,添加:
Action act = delegate()
{
_calendar.SelectedDate = ((ViewModel)DataContext).Display;
_calendar.DisplayMode = CalendarMode.Year;
_calendar.SelectedDate = null;
};
Dispatcher.BeginInvoke(act, DispatcherPriority.ApplicationIdle);
看起來很奇怪,但應該有效。 如果需要,您無法將SelectedDate設置為null。
補充:SelectedDate技巧似乎有必要將你的日歷日期設置為2015,截圖是第1年;-)
不是DisplayDate
綁定導致Calendar
控件拉伸; 它將DisplayMode
設置為“ Year
”。 它看起來像Calendar
控件中的錯誤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.