簡體   English   中英

WPF中的日歷控件奇怪的行為

[英]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") };
        } 

這是它在綁定后的樣子。

圖像與DisplayDAte綁定

案例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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM