Предоставление пользовательского свойства DateTime пользовательскому элементу управления. - PullRequest
0 голосов
/ 03 марта 2011

Я разрабатываю календарь, в котором мои дни выровнены так:

    <Label Grid.Row="1" Grid.Column="1" Content="{Binding Path=SundayLabel, FallbackValue=Sunday}" Style="{StaticResource ResourceKey=DayLabelStyle}" />
    <custom:DayDisplay Grid.Row="2" Grid.Column="1" x:Name="SundayDisplay" />

    <Label Grid.Row="1" Grid.Column="2" Content="{Binding Path=MondayLabel, FallbackValue=Monday}"  Style="{StaticResource ResourceKey=DayLabelStyle}" />
    <custom:DayDisplay Grid.Row="2" Grid.Column="2" x:Name="MondayDisplay" />

и так далее.DayDisplay - это пользовательский элемент управления WPF.Элемент управления, содержащий все эти DayDisplays, должен каким-то образом установить отдельные дни с DateTime, предпочтительно из кода позади.

Есть ли какой-нибудь способ предоставить пользовательское свойство в моем представлении DayDisplay, чтобы я мог сделать что-то вроде:

    <custom:DayDisplay Grid.Row="2" Grid.Column="2" x:Name="MondayDisplay" x:Day="{MondayDateTime}"/>

Желательно, чтобы я хотел хранить все пользовательские пары DayDisplay в Словаре и автоматически генерировать их, если это возможно.Любая помощь очень ценится:)

Спасибо, Никлас

1 Ответ

1 голос
/ 03 марта 2011

вы должны выставить свойство зависимости DateTime для элемента управления, сделав так:

    public DateTime Day
    {
        get { return (DateTime)GetValue(DayProperty); }
        set { SetValue(DayProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Day.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty DayProperty =
        DependencyProperty.Register("Day", typeof(DateTime), typeof(DayOfWeek), new UIPropertyMetadata(DateTime.MinValue));

если вы хотите, чтобы это было сгенерировано автоматически, вам нужно иметь ItemsControl, который содержит ваш dayControl, например:

    <ItemsControl x:Name="DaysItemsControl">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <custom:DayDisplay Day="{Binding}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

, а затем DataBind его из кода:

        DateTime[] week = new DateTime[] { new DateTime(2000,1,1), new DateTime(200,1,2) };
        DayItemsControl.ItemsSource = week;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...