【问题标题】:WPF: How to bind current date to TextBlock?WPF:如何将当前日期绑定到 TextBlock?
【发布时间】:2011-03-23 14:27:56
【问题描述】:

我正在创建自己的日历月视图控件。我刚刚开始,我有后退和前进按钮(浏览月份)和一个显示当前月份的文本块。

<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 属性绑定到某个东西,但我不知道是什么。此外,当我单击BackMonthButtonForwardMonthButton 时,我希望DateTextBlock 显示适当的月份和年份。你能帮助我吗?谢谢。

【问题讨论】:

    标签: wpf wpf-controls binding


    【解决方案1】:

    您可以通过转换器将Text 属性绑定到Date 属性:

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

    DateConverter 编码了将DateTime 对象转换为所需格式的文本字符串的规则,以及(可选)解析字符串以转换为DateTime 的反向操作,然后您可以在应用程序中使用.

    请参阅this tutorial 了解完整的演练。

    【讨论】:

    • ChrisF,感谢您的回复。我熟悉Converters。我的问题是您在答案中包含的DateProperty。你能解释一下在哪里定义它以及如何定义它吗?谢谢。
    • @Boris - 需要在您的 ViewModel 上定义。
    • 我在代码隐藏类中创建了一个字段DateTime date 和一个相应的属性,名为Date。另外,我在同一个代码隐藏类中实现了 INotifyPropertyChanged 接口。使用您的代码,我未能将 Date 属性绑定到 DateTextBlock 文本属性。你知道我在哪里做错了吗?
    • @Boris - 不方便,抱歉。对一般绑定做更多的研究。我最熟悉与 WPF 略有不同的 Silverlight 绑定。​​
    • 感谢所有的帮助,克里斯。干杯!
    【解决方案2】:

    最好的方法是创建一个自定义的MonthCalendar 控件。请注意,自定义控件与用户控件有很大不同,因为它们看起来很少。 Here 是微软定义自定义控件的起点。

    对于自定义控件,您将定义日历逻辑以及导航到上个月和下个月的命令,并只读依赖属性以使月/年文本可用。所有这些都将在从 Control(或 Control 派生)派生的类中的代码文件中。

    然后您将定义一个控件模板来显示自定义控件。该模板将具有连接(绑定)到下一个和上一个按钮的按钮,并且文本块将绑定到只读依赖属性。

    如果您想制作自定义控件,我强烈建议您阅读this book

    同时,在 Google 上搜索 WPF 月份控件,您会发现许多可以使用或模拟的控件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-02
      • 2011-01-01
      • 1970-01-01
      • 2011-01-26
      相关资源
      最近更新 更多