2011-06-16 121 views

回答

1

下面是完成它的一種方式是需要一點功夫:

日曆和CalendarDayButton繼承默認樣式並進行一些小的修改:

<local:DateIsInListConverter x:Key="DateIsInListConverter" /> 

<Style x:Key="CustomCalendarDayButtonStyle" TargetType="{x:Type CalendarDayButton}" BasedOn="{StaticResource {x:Type CalendarDayButton}}">  
    <Style.Triggers> 
     <DataTrigger Value="True"> 
      <DataTrigger.Binding> 
       <MultiBinding Converter="{StaticResource DateIsInListConverter}"> 
        <Binding /> 
        <Binding ElementName="MyWindow" Path="HighlightedDates" /> 
       </MultiBinding> 
      </DataTrigger.Binding> 
      <Setter Property="Background" Value="Orange" /> 
     </DataTrigger> 
    </Style.Triggers> 
</Style> 

<Style x:Key="CustomCalendarStyle" TargetType="{x:Type Calendar}" BasedOn="{StaticResource {x:Type Calendar}}"> 
    <Setter Property="CalendarDayButtonStyle" Value="{StaticResource CustomCalendarDayButtonStyle}" /> 
</Style> 

第二結合在MultiBinding是到您的列表有趣的日期,這裏是DateIsInListConverter執行:

public class DateIsInListConverter : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     if (values.Length < 2 || !(values[0] is DateTime) || !(values[1] is IEnumerable<DateTime>)) 
      return false; 

     var date = (DateTime) values[0]; 
     var dateList = (IEnumerable<DateTime>) values[1]; 

     return dateList.Contains(date); 
    } 

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

現在使用CustomCalendarStyle上一個datepicker和你完成:

<DatePicker CalendarStyle="{StaticResource CustomCalendarStyle}" /> 

對於一個完整的例子可再使用HighlightDatePicker,看看我的GitHub庫:https://github.com/cmyksvoll/HighlightDatePicker

0

您必須重寫DayButton的控件模板,並添加一個數據查詢器,查找您的屬性以顯示突出顯示。