WPF: Как привязать текущую дату к TextBlock? - PullRequest
0 голосов
/ 23 марта 2011

Я создаю свой собственный элемент управления представлением календарного месяца. Я только начал, и у меня есть кнопка «Назад» и «Вперед» (для просмотра месяцев) и текстовый блок для отображения текущего месяца.

<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:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    d:DesignHeight="300" 
    d:DesignWidth="450">
  <Grid>
    <Grid.RowDefinitions>
      <RowDefinition Height="50" />
      <RowDefinition Height="20"/>
      <RowDefinition />
    </Grid.RowDefinitions>

    <StackPanel 
        Grid.Row="0" 
        Orientation="Horizontal" 
        Margin="20,0" 
        HorizontalAlignment="Left" 
        VerticalAlignment="Center">
      <Button 
          Name="BackMonthButton" 
          Width="30" 
          Height="23" 
          Margin="0,0,7,0" 
          FontFamily="Arial" 
          FontSize="14" 
          Content="◄" />
      <Button 
          Name="ForwardMonthButton" 
          Width="30" 
          Height="23" 
          Margin="7,0,20,0" 
          FontFamily="Arial" 
          FontSize="14" 
          Content="►" />
      <TextBlock 
          Name="DateTextBlock" 
          HorizontalAlignment="Center" 
          VerticalAlignment="Center" 
          FontFamily="Gulim" 
          FontSize="26" 
          Text="March 2011" />
    </StackPanel>

  </Grid>

</UserControl>

Я уже застрял, так как никогда раньше не создавал элементы управления в WPF. Я бы хотел, чтобы DateTextBlock отображал текущий месяц и год. Я знаю, что должен связать свойство Text с чем-то, но я не знаю что. Кроме того, когда я нажимаю BackMonthButton или ForwardMonthButton, я бы хотел, чтобы DateTextBlock показывал соответствующий месяц и год. Вы можете мне помочь? Благодарю.

Ответы [ 2 ]

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

Вы можете связать свойство Text со свойством Date с помощью конвертера:

<TextBlock Text={Binding DateProperty, Converter={StaticResource DateConverter}"/>

DateConverter кодирует правила для преобразования объекта DateTime в текстовую строку вашего необходимого формата и (необязательно) обратную операцию для анализа строки для преобразования в DateTime, которую вы затем можете использовать в своем приложении .

См. этот урок для полного ознакомления.

0 голосов
/ 23 марта 2011

Наилучшим подходом было бы создание пользовательского элемента управления MonthCalendar. Обратите внимание, что пользовательские элементы управления очень отличаются от пользовательских элементов управления, потому что они выглядят менее. Здесь - отправная точка Microsoft для определения пользовательских элементов управления.

Для пользовательского элемента управления вы должны определить логику календаря вместе с командами для перехода к предыдущему месяцу и следующему месяцу и только для чтения свойств зависимостей, чтобы сделать текст месяца / года доступным. Все это будет в файле кода в классе, производном от Control (или производной от Control).

Затем вы определяете шаблон элемента управления для отображения пользовательского элемента управления. Этот шаблон будет иметь кнопки, привязанные (привязанные) к следующей и предыдущей кнопкам, а текстовый блок будет привязан к свойствам зависимостей только для чтения.

Я настоятельно рекомендую вам прочитать эту книгу , если вы хотите создать пользовательские элементы управления.

А пока найдите в Google элемент управления месяцем WPF, и вы найдете множество элементов управления, которые можно использовать или эмулировать.

...