Моя цель - настроить DatePickerPage, создавая мои собственные с копированием xaml и cs с телефона.codeplex.com (Windows Phone Toolkit DatePickerPage).Копия DatePicker для настройки
Я создал класс с именем CustomDatepickerPage, который работает точно так же, как указано в источнике, но у меня есть проблема в конструкторе моего класса, когда я должен установить LoopingSelectors DataSources:
public CustomDatepickerPage()
{
InitializeComponent();
// Hook up the data sources
PrimarySelector.DataSource = new YearDataSource();
SecondarySelector.DataSource = new MonthDataSource();
TertiarySelector.DataSource = new DayDataSource();
InitializeDateTimePickerPage(PrimarySelector, SecondarySelector, TertiarySelector);
}
В факт, я не могу инициализировать 3 DataSources, Visual Studio говорит мне, что я не могу получить доступ из-за уровня защиты.
Я не знаю, как это сделать, чтобы получить эти Источники данных.
Благодарим за помощь.
Вот полный код CustomDatepickerPage:
XAML:
<primitives:DateTimePickerPageBase
x:Class="MyNamespace.CustomDatepickerPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True"
xmlns:primitives="clr-namespace:Microsoft.Phone.Controls.Primitives;assembly=Microsoft.Phone.Controls.Toolkit"
xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit">
<primitives:DateTimePickerPageBase.Resources>
<controls:DateTimePickerResources x:Key="DateTimePickerResources"/>
<ExponentialEase x:Key="Ease" EasingMode="EaseIn"/>
</primitives:DateTimePickerPageBase.Resources>
<Grid Background="{StaticResource PhoneChromeBrush}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="VisibilityStates">
<VisualState x:Name="Open">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="PlaneProjection"
Storyboard.TargetProperty="RotationX"
From="-50"
To="0"
Duration="0:0:0.2"/>
</Storyboard>
</VisualState>
<VisualState x:Name="Closed">
<Storyboard>
<DoubleAnimation
Storyboard.TargetName="PlaneProjection"
Storyboard.TargetProperty="RotationX"
To="90"
Duration="0:0:0.2"
EasingFunction="{StaticResource Ease}"/>
</Storyboard>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
<Grid.Projection>
<PlaneProjection x:Name="PlaneProjection"/>
</Grid.Projection>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition/>
</Grid.RowDefinitions>
<!-- SystemTray placeholder -->
<Rectangle
x:Name="SystemTrayPlaceholder"
Grid.Row="0"
Height="32"/>
<!-- Title -->
<TextBlock
x:Name="HeaderTitle"
Grid.Row="1"
Text="{Binding DatePickerTitle, Source={StaticResource DateTimePickerResources}}"
FontFamily="{StaticResource PhoneFontFamilySemiBold}"
FontSize="{StaticResource PhoneFontSizeMedium}"
Foreground="{StaticResource PhoneForegroundBrush}"
Margin="24,16,24,24"/>
<!-- LoopingSelectors -->
<Grid
Grid.Row="2"
HorizontalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<primitives:LoopingSelector
x:Name="SecondarySelector"
Grid.Column="0"
Width="148"
ItemSize="148,148"
ItemMargin="6">
<primitives:LoopingSelector.ItemTemplate>
<DataTemplate>
<StackPanel
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Margin="6">
<TextBlock
Text="{Binding MonthNumber}"
FontSize="54"
FontFamily="{StaticResource PhoneFontFamilySemiBold}"
Margin="0,-8"/>
<TextBlock
Text="{Binding MonthName}"
FontSize="20"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
Margin="0,-2"/>
</StackPanel>
</DataTemplate>
</primitives:LoopingSelector.ItemTemplate>
</primitives:LoopingSelector>
<primitives:LoopingSelector
x:Name="TertiarySelector"
Grid.Column="1"
Width="148"
ItemSize="148,148"
ItemMargin="6">
<primitives:LoopingSelector.ItemTemplate>
<DataTemplate>
<StackPanel
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Margin="6">
<TextBlock
Text="{Binding DayNumber}"
FontSize="54"
FontFamily="{StaticResource PhoneFontFamilySemiBold}"
Margin="0,-8"/>
<TextBlock
Text="{Binding DayName}"
FontSize="20"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
Margin="0,-2"/>
</StackPanel>
</DataTemplate>
</primitives:LoopingSelector.ItemTemplate>
</primitives:LoopingSelector>
<primitives:LoopingSelector
Grid.Column="2"
x:Name="PrimarySelector"
Width="148"
ItemSize="148,148"
ItemMargin="6">
<primitives:LoopingSelector.ItemTemplate>
<DataTemplate>
<StackPanel
HorizontalAlignment="Left"
VerticalAlignment="Bottom"
Margin="6">
<TextBlock
Text="{Binding YearNumber}"
FontSize="54"
FontFamily="{StaticResource PhoneFontFamilySemiBold}"
Margin="0,-8"/>
<TextBlock
Text=" "
FontSize="20"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
Margin="0,-2"/>
</StackPanel>
</DataTemplate>
</primitives:LoopingSelector.ItemTemplate>
</primitives:LoopingSelector>
</Grid>
</Grid>
<primitives:DateTimePickerPageBase.ApplicationBar>
<shell:ApplicationBar IsVisible="True">
<!--
Due to platform restrictions, ApplicationBarIconButton.IconUri content can not come from the
Microsoft.Phone.Controls.Toolkit assembly, so it is up to the application developer to ensure
these resources are placed in the right location and marked as Build Action=Content. For
convenience, platform-consistent images are included with the Toolkit installer.
Note: ApplicationBarIconButton.Text automatically comes from the Microsoft.Phone.Controls.Toolkit
resources (where it can be localized).
-->
<shell:ApplicationBarIconButton
IconUri="/Toolkit.Content/ApplicationBar.Check.png"
Text="DONE"/>
<shell:ApplicationBarIconButton
IconUri="/Toolkit.Content/ApplicationBar.Cancel.png"
Text="CANCEL"/>
</shell:ApplicationBar>
</primitives:DateTimePickerPageBase.ApplicationBar>
</primitives:DateTimePickerPageBase>
CS:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Navigation;
using Microsoft.Phone.Controls;
using Microsoft.Phone.Shell;
using System.Globalization;
using Microsoft.Phone.Controls.Primitives;
namespace MyNamespace
{
public partial class CustomDatepickerPage : DateTimePickerPageBase
{
/// <summary>
/// Initializes a new instance of the DatePickerPage control.
/// </summary>
public CustomDatepickerPage()
{
InitializeComponent();
// Hook up the data sources
PrimarySelector.DataSource = new YearDataSource();
SecondarySelector.DataSource = new MonthDataSource();
TertiarySelector.DataSource = new DayDataSource();
InitializeDateTimePickerPage(PrimarySelector, SecondarySelector, TertiarySelector);
}
/// <summary>
/// Gets a sequence of LoopingSelector parts ordered according to culture string for date/time formatting.
/// </summary>
/// <returns>LoopingSelectors ordered by culture-specific priority.</returns>
protected override IEnumerable<LoopingSelector> GetSelectorsOrderedByCulturePattern()
{
string pattern = CultureInfo.CurrentCulture.DateTimeFormat.ShortDatePattern.ToUpperInvariant();
//if (DateTimePickerBase.DateShouldFlowRTL())
//{
// char[] reversedPattern = pattern.ToCharArray();
// Array.Reverse(reversedPattern);
// pattern = new string(reversedPattern);
//}
return GetSelectorsOrderedByCulturePattern(
pattern,
new char[] { 'Y', 'M', 'D' },
new LoopingSelector[] { PrimarySelector, SecondarySelector, TertiarySelector });
}
/// <summary>
/// Handles changes to the page's Orientation property.
/// </summary>
/// <param name="e">Event arguments.</param>
protected override void OnOrientationChanged(OrientationChangedEventArgs e)
{
if (null == e)
{
throw new ArgumentNullException("e");
}
base.OnOrientationChanged(e);
SystemTrayPlaceholder.Visibility = (0 != (PageOrientation.Portrait & e.Orientation)) ?
Visibility.Visible :
Visibility.Collapsed;
}
/// <summary>
/// Sets the selectors and title flow direction.
/// </summary>
/// <param name="flowDirection">Flow direction to set.</param>
public override void SetFlowDirection(FlowDirection flowDirection)
{
HeaderTitle.FlowDirection = flowDirection;
PrimarySelector.FlowDirection = flowDirection;
SecondarySelector.FlowDirection = flowDirection;
TertiarySelector.FlowDirection = flowDirection;
}
}
}
Спасибо GwenGuts. Мне действительно нужен этот контроль (** для WP8.1 WinRT **), но я не могу заставить его работать. У вас есть рабочий пример? Действительно ли ваше решение работает в WP8.1 WinRT? (Или это приложение WP8.1 Silverlight?) –
@JohnCroneh Привет, это приложение WP8.1 Silverlight. Какова ваша проблема? – GwenGuts
Проблема заключается в следующем: http://stackoverflow.com/questions/27729182/windows-phone-8-1-winrt-custom-looping-selector –