【问题标题】:Calendar MouseLeftButtonDown is fired after clicking outside of the component在组件外部单击后触发 Calendar MouseLeftButtonDown
【发布时间】:2015-11-11 19:13:40
【问题描述】:

我想通过单击日历控件中的日期来使用 MouseLeftButtonDown 引发事件。但是直到我点击这个组件之外它才会被提升。

这里是 xaml 代码:

<Controls:BasicCalendar Grid.Row="0"
                        x:Name="DemoCalendar" 
                        DisplayDate="{Binding Path=DisplayDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                        HighlightedDateText="{Binding HighlightedDateText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                        Grid.Column="0"
                        HorizontalAlignment="Center"
                        VerticalAlignment="Center"
                        Margin="0,0,0,0"
                        DateHighlightBrush="Gold">
  <i:Interaction.Triggers>
      <i:EventTrigger EventName="MouseLeftButtonDown">
          <cal:ActionMessage MethodName="CalendarSelectDateEvent">
             <cal:Parameter Value="{Binding ElementName=DemoCalendar, Path=SelectedDate}" />
            </cal:ActionMessage>
      </i:EventTrigger>
   </i:Interaction.Triggers>
</Controls:BasicCalendar>

这是我在单击日历中的某个日期后想要提出的事件:

public void CalendarSelectDateEvent(DateTime selectedDate)
{
  this.ActualCalendarEvents = this.CalendarEvents.Where(x => x.Date >= selectedDate).ToList();

  var a = this.ActualCalendarEvents;
  this.ActualCalendarEvents = null;
  NotifyOfPropertyChange(() => ActualCalendarEvents);
  this.ActualCalendarEvents = a;
  NotifyOfPropertyChange(() => ActualCalendarEvents);
}

当我尝试使用 Click 事件而不是 MouseLeftButtonDown 时,日历控件会自动处理它而不触发 CalendarSelectDateEvent。有没有办法同时触发这两个事件? (对于日历控件选择和突出显示 dat 和对于我 CalendarSelectDateEvent)

【问题讨论】:

  • 你试过PreviewMouseLeftButtonDown事件吗?
  • 是的,我做了,但我需要 SelectedDate 的值,它明确地执行日历控件。因此,当我使用 PreviewMouseLeftButtonDown 时,我在 SelectedDate 中没有正确的值

标签: c# wpf xaml mvvm


【解决方案1】:

我已经想通了。最后真的很容易。日历控件具有属性 SelectedDate。我只是在后面的代码中将 SelectedDate 绑定到我的属性 SelectedDateChanged,当 SelectedDate 更改时,我引发了事件 CalendarSelectDateEvent。

            <Controls:BasicCalendar Grid.Row="0"
                                    x:Name="DemoCalendar" 
                                    DisplayDate="{Binding Path=DisplayDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                    HighlightedDateText="{Binding HighlightedDateText, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                                    Grid.Column="0"
                                    HorizontalAlignment="Center"
                                    VerticalAlignment="Center"
                                    Margin="0,0,0,0"
                                    SelectedDate="{Binding SelectedDateChanged}"
                                    DateHighlightBrush="Gold">
            </Controls:BasicCalendar>

像这样:

public DateTime SelectedDateChanged
{
  get
  {
    return selectedDateChanged;
  }

  set
  {
    this.selectedDateChanged = value;
    this.CalendarSelectDateEvent(this.selectedDateChanged);
  }
}   

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-28
    • 2012-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-09
    • 1970-01-01
    相关资源
    最近更新 更多