Показывать только месяц и год в DatePicker WP8

    <toolkit:DatePicker Value="2/28/2010" />

Мне нужно показать только месяц и год в моем средстве выбора даты (WP8). Я пытался сделать это таким образом, но это не сработало:

    <toolkit:DatePicker Value="{Binding DateValue}" ValueStringFormat="{}{0:MM-yyyy}" />

Мне это нужно и для DatePickerPage.


person CatCap    schedule 12.09.2013    source источник


Ответы (5)


Вы не можете реализовать это, добавив формат строки xaml. Для реализации такой функциональности вам необходимо отредактировать код инструментария. Для этого вы можете загрузить открытый исходный код с CodePlex. После загрузки проекта найдите класс Date Picker и отредактируйте соответствующие методы, чтобы удалить дату. перекомпилируйте исходный код в режиме выпуска, и вы сможете использовать эту новую DLL.

person Rakesh R Nair    schedule 12.09.2013

Если вы не хотите копировать страницу из Codeplex, вы можете расширить страницу и переопределить метод GetSelectorsOrderedByCulturePattern, чтобы изменить видимость селектора дня. В приведенном ниже примере я установил месяц, а затем год, что вам может не понадобиться в вашей версии. Кроме того, я обращаюсь к элементам управления по имени, поэтому будьте осторожны с будущими обновлениями WindowsPhone Toolkit.

<toolkit:DatePickerPage
    x:Class="MyApp.MonthYearPage"
    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"
    xmlns:toolkit="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls.Toolkit"
    mc:Ignorable="d"
    shell:SystemTray.IsVisible="True">

</toolkit:DatePickerPage>

А также

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 Microsoft.Phone.Controls.Primitives;
using System.Diagnostics;
using System.Windows.Media;

namespace MyApp
{
    public partial class MonthYearPage : DatePickerPage
    {
        public MonthYearPage()
        {
            InitializeComponent();
        }

        protected override IEnumerable<LoopingSelector> GetSelectorsOrderedByCulturePattern()
        {
            var PrimarySelector = ((Grid)Content).FindName("PrimarySelector") as LoopingSelector;
            var SecondarySelector = ((Grid)Content).FindName("SecondarySelector") as LoopingSelector;
            var TertiarySelector = ((Grid)Content).FindName("TretiarySelector") as LoopingSelector;

            var selectors = GetSelectorsOrderedByCulturePattern(
                "DMY",
                new char[] { 'Y', 'M', 'D' },
                new LoopingSelector[] { PrimarySelector, SecondarySelector, TertiarySelector });

            // Passing "DMY" in on the previous line makes sure the day selector
            // is the first one in the enumeration. You may want to change the order
            // of 'M' and 'Y' in that string for your needs or depending on region.
            selectors.First<LoopingSelector>().Visibility = Visibility.Collapsed;
            return selectors;
        }
    }
}
person LukeChastain    schedule 24.03.2014

{}{0:"Y","y"} хорошего дня :D (информация здесь --> http://msdn.microsoft.com/en-us/library/az4se3k1%28v=VS.95%29.aspx)

person MatDev8    schedule 12.09.2013
comment
‹toolkit:DatePicker Value={Binding DateValue} ValueStringFormat={}{0:Y,y} /› Такой код не компилируется. :( - person CatCap; 12.09.2013
comment
извините, попробуйте ValueStringFormat={}{0:Y,y} или ValueStringFormat={}{0:Y:y}... в данный момент я не могу проверить на своем компьютере, извините. Если это не сработает, я протестируй сегодня вечером :) - person MatDev8; 12.09.2013
comment
‹toolkit:DatePicker Value={Binding DateValue} ValueStringFormat={}{0:Y} /› такой код работает только для DatePicker, но мне нужно только два столбца на DatePickerPage. - person CatCap; 12.09.2013
comment
хм, я думаю, что вы не можете удалить столбец с помощью набора инструментов, но вы можете увидеть эту ссылку geekchamp.com/articles/. - person MatDev8; 12.09.2013

Это должно помочь отформатировать содержимое DateTimeButton для отображения только месяца и года: <toolkit:DatePicker x:Name="datePicker" ValueStringFormat="{}{0:y}"/>

person user2959478    schedule 06.11.2013

Формат выставляется в зависимости от локации, но этого можно избежать, написав так:

<toolkit:DatePicker 
                    Value="{Binding DateCard, Mode=TwoWay}" 
                    ValueStringFormat="{}{0:MM'/'yy}" />

И будет тебе счастье!(дд'/'мм'/'гггг)

person Denis Prohorchik    schedule 11.08.2015