Хорошо, это немного сложнее.Я создал пользовательский элемент управления MonthViewControl
:
Xaml:
<UserControl x:Class="MonthView.Controls.MonthViewControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:MonthView.Controls"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<!-- The following line is important! -->
<TextBlock Text="{Binding Path=Date, Converter={...}}" />
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="6" Columns="1" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<controls:MonthWeekControl />
<controls:MonthWeekControl />
<controls:MonthWeekControl />
<controls:MonthWeekControl />
<controls:MonthWeekControl />
<controls:MonthWeekControl />
</ItemsControl>
</UserControl>
Кодовый код:
public partial class MonthViewControl : UserControl
{
public static readonly DependencyProperty DateProperty =
DependencyProperty.Register("Date", typeof(DateTime),
typeof(MonthViewControl),
new UIPropertyMetadata(DateTime.Today));
public DateTime Date
{
get { return (DateTime)GetValue(DateProperty); }
set { SetValue(DateProperty, value); }
}
public MonthViewControl()
{
InitializeComponent();
}
}
Затем я создал пользовательский элемент управления MonthWeekControl
:
Xaml:
<UserControl x:Class="MonthView.Controls.MonthWeekControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:controls="clr-namespace:MonthView.Controls"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Border Grid.Column="0">
<!-- The following line is important! -->
<TextBlock Text="{Binding Path=WeekNumber}" />
</Border>
<ItemsControl Grid.Column="1">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="1" Columns="7" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<controls:MonthDayControl />
<controls:MonthDayControl />
<controls:MonthDayControl />
<controls:MonthDayControl />
<controls:MonthDayControl />
<controls:MonthDayControl />
<controls:MonthDayControl />
</ItemsControl>
</Grid>
</UserControl>
Код:
public partial class MonthWeekControl : UserControl
{
public static readonly DependencyProperty WeekNumberProperty =
DependencyProperty.Register("WeekNumber", typeof(int),
typeof(MonthWeekControl),
new UIPropertyMetadata(Utilities.GetWeekInYear(dateFromMonthViewControl)));
// Utilities.GetWeekInYear(DateTime date) gets the week number
// based on the provided date
public int WeekNumber
{
get { return (int)GetValue(WeekNumberProperty); }
set { SetValue(WeekNumberProperty, value); }
}
public MonthWeekControl()
{
InitializeComponent();
}
}
Проблема в том, что я не знаю, как получить свойство зависимости Date
из MonthViewControl
чтобы использовать его в MonthWeekControl
.Как вы можете видеть в определении свойства зависимостей WeekNumber
для MonthWeekControl
, для вычисления номера недели необходима дата.
Пожалуйста, помогите.Спасибо!