0

默认情况下,UWA 8.1中的DatePicker和TimePicker Windows Store和Windows Phone(WinRT)会显示今天的日期和当前时间,而我想先设置两个控件默认字符串让我们说“设置截止日期/时间”,因为它们是可选的。通用Windows应用程序8.1 DatePicker和TimePicker设置默认字符串

我他们使用MVVM模式和MVVM光库仅

public DateTimeOffset? DueDate { get; set; } 

public TimeSpan? DueTime { get; set; } 

我试着按以下方式,请提出任何解决方案结合了以下特性。

我已经使用了两个转换器,但有一个问题。

当我点击“设置截止日期”按钮,然后单击DatePicker弹出屏幕中的勾号而不更改日期,月份或年份时,转换器不会触发,当我对日期进行更改时,月或年,然后它会触发,我发现即使属性绑定是可以为空的DateTimeOffset,但在XAML中的DatePicker会将Date值显示为当前日期,IsHitTestVisible =“False”也会删除倾斜效果,因为该按钮可以“T进行了点击,但倾斜效果不是必须的选择对我来说

<Page 
    x:Class="UWP.MVVM.MainPage" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:local="using:UWP.MVVM" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:vm="using:UWP.MVVM.ViewModels" 
    xmlns:interactivity="using:Microsoft.Xaml.Interactivity" 
    xmlns:core="using:Microsoft.Xaml.Interactions.Core" 
    xmlns:converters="using:UWP.MVVM.Converters" 
    mc:Ignorable="d" 
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"> 
    <Page.Resources> 
     <converters:DateTimeOffsetToVisibilityConverter x:Key="DateTimeOffsetToVisibilityConverter"/> 
     <converters:DateTimeOffsetToOpacityConverter x:Key="DateTimeOffsetToOpacityConverter"/> 
    </Page.Resources> 

    <Grid Margin="24,24"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
      <RowDefinition Height="Auto"/> 
     </Grid.RowDefinitions> 
     <TextBox Header="First Name" 
       Text="{Binding Person.FirstName}"/> 
     <DatePicker Name="DateOfBirth" 
        Date="{Binding Person.DateOfBirth, Mode=TwoWay}" 
        Grid.Row="1" 
        Opacity="{Binding Person.DateOfBirth, Converter={StaticResource DateTimeOffsetToOpacityConverter}}"/> 
     <Button Grid.Row="1" 
       Content="Set Due Date" 
       IsHitTestVisible="False" 
       HorizontalAlignment="Stretch" 
       VerticalAlignment="Stretch" 
       HorizontalContentAlignment="Left" 
       Visibility="{Binding Person.DateOfBirth, Converter={StaticResource DateTimeOffsetToVisibilityConverter}}"/> 
    </Grid> 
</Page> 

namespace UWP.MVVM.Converters 
{ 
    using System; 
    using Windows.UI.Xaml; 
    using Windows.UI.Xaml.Data; 

    public class DateTimeOffsetToVisibilityConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      if (value == null) 
      { 
       return Visibility.Visible; 
      } 
      else 
      { 
       return Visibility.Collapsed; 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      if (value == Visibility.Visible) 
      { 
       return null; 
      } 
      else 
      { 
       return DateTimeOffset.Now; 
      } 
     } 
    } 
} 

namespace UWP.MVVM.Converters 
{ 
    using System; 
    using Windows.UI.Xaml; 
    using Windows.UI.Xaml.Data; 

    public class DateTimeOffsetToOpacityConverter : IValueConverter 
    { 
     public object Convert(object value, Type targetType, object parameter, string language) 
     { 
      if (value == null) 
      { 
       return 0D; 
      } 
      else 
      { 
       return 1D; 
      } 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, string language) 
     { 
      if (value == 0D) 
      { 
       return null; 
      } 
      else 
      { 
       return DateTimeOffset.Now; 
      } 
     } 
    } 
} 

回答

1

你可以把一个文本块的日期选择器,用你想要的文字。

根据DueDate/DueTime属性的值,使用转换器设置文本块的可见性(如果其空返回可见,否则返回折叠)。

+0

我试过这个,但遇到了一个问题,当用户点击TextBlock时,DatePicker应该启动,但DatePicker没有这样的属性,我可以绑定以打开它,我见过这个帖子http:// transoceanic .blogspot.in/2011/08/wp7-create-datepicker-control.html但我需要在MVVM中这样做,我想我可能需要继承并创建一个DependencyProperty,但我想知道是否有人以前做过或以更好的方式 –

+0

具有datepicker风格的转换器,如果绑定日期属性为null,则将contentpresenter的不透明度设置为零。 –

+0

起初我不明白你说的是什么,因为我在考虑“如何启动日期选择器”,然后回想起IsHitTestVisible =“False”,这是我与XAML合作2年后,检查我的编辑 –

相关问题