默认情况下,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;
}
}
}
}
我试过这个,但遇到了一个问题,当用户点击TextBlock时,DatePicker应该启动,但DatePicker没有这样的属性,我可以绑定以打开它,我见过这个帖子http:// transoceanic .blogspot.in/2011/08/wp7-create-datepicker-control.html但我需要在MVVM中这样做,我想我可能需要继承并创建一个DependencyProperty,但我想知道是否有人以前做过或以更好的方式 –
具有datepicker风格的转换器,如果绑定日期属性为null,则将contentpresenter的不透明度设置为零。 –
起初我不明白你说的是什么,因为我在考虑“如何启动日期选择器”,然后回想起IsHitTestVisible =“False”,这是我与XAML合作2年后,检查我的编辑 –