Я не знаю ни одного существующего контроля. Однако вы можете попробовать использовать элемент управления календаря с поведением, чтобы перевести выбор в выбор диапазона за всю неделю.
Например:
<sdk:Calendar HorizontalAlignment="Left"
Margin="8,8,0,120"
Width="187">
<i:Interaction.Behaviors>
<local:SelectWeekBehaviour />
</i:Interaction.Behaviors>
</sdk:Calendar>
С поведением:
public class SelectWeekBehaviour : Behavior<Calendar>
{
private void DateChanged(object sender, SelectionChangedEventArgs e)
{
UnsubscribeFromSelectionNotifications();
var selectedDate = AssociatedObject.SelectedDate;
if (selectedDate.HasValue)
{
var dayOfWeek = (int)selectedDate.Value.DayOfWeek;
var firstDate = selectedDate.Value.AddDays(-dayOfWeek);
var lastDate = selectedDate.Value.AddDays(6 - dayOfWeek);
AssociatedObject.SelectedDates.Clear();
AssociatedObject.SelectedDates.AddRange(firstDate, lastDate);
}
SubscribeToSelectionNotifications();
}
protected override void OnAttached()
{
base.OnAttached();
AssociatedObject.SelectionMode = CalendarSelectionMode.SingleRange;
AssociatedObject.FirstDayOfWeek = DayOfWeek.Sunday;
SubscribeToSelectionNotifications();
}
protected override void OnDetaching()
{
base.OnDetaching();
UnsubscribeFromSelectionNotifications();
}
private void SubscribeToSelectionNotifications()
{
AssociatedObject.SelectedDatesChanged += DateChanged;
}
private void UnsubscribeFromSelectionNotifications()
{
AssociatedObject.SelectedDatesChanged -= DateChanged;
}
}
Поведение не совсем готово к работе, так как я заставил неделю начинать работу в воскресенье, чтобы было легче определить начало и конец недели.