내 목표는 DatePickerPage를 사용자 정의하고 phone.codeplex.com (Windows Phone Toolkit DatePickerPage)에서 xaml 및 cs를 복사하여 내 자신을 생성하는 것입니다. 복사 DatePicker 사용자 정의
나는 소스에 표시된 것과 동일한 방식으로 작동 CustomDatepickerPage라는 클래스를 만들었습니다,하지만 난 LoopingSelectors의 데이터 소스 설정해야 할 때 나는 나의 클래스의 생성자에 문제가있다 : 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 개의 DataSource를 초기화 할 수 없습니다. Visual Studio는 보호 수준으로 인해 액세스 할 수 없다고 말합니다.
나는이 데이터 소스를 얻는 방법을 모른다.
도움 주셔서 감사합니다.
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 –