Цифровые Часы или Таймер в Window Phone 7 - PullRequest
0 голосов
/ 10 ноября 2011

enter image description here Я хочу отобразить цифровой таймер в своем приложении WP7.

На самом деле я работаю над заявкой на событие.

Что я хочу показать, так это то, что приложение будет отображаться через несколько дней, часов, минут и секунд, а время должно непрерывно уменьшаться.

Изображение, приведенное выше, даст вам представление о том, что я хочу именно.

Что мне нужно для этого сделать. Любой доступный API или встроенный элемент управления, который поможет мне в этом, или мне нужно поработать над этим.

Если ничего встроенного не имеется, то и ваши предложения будут с радостью приняты.

Спасибо и всего наилучшего

Ответы [ 3 ]

0 голосов
/ 10 ноября 2011

Часы должны быть легкими, это просто какой-то текст. Самой большой проблемой будет получение правильного шрифта в проект, так как в WP7 нет встроенного цифрового шрифта. Вы можете импортировать внешние шрифты в свой проект: Как интегрировать неподдерживаемые шрифты в WP7

Как говорили другие авторы, все, что вам нужно для обновления дисплея, - это иметь таймер, вызывающий событие один раз в секунду (или, возможно, фоновый рабочий поток в цикле сна, поскольку вы должны иметь возможность получить немного больше контроля)

0 голосов
/ 11 ноября 2011

Я использовал этот код

XAML

            <TextBlock x:Name="txtClockDays" Text="66:" Grid.Row="1" Grid.Column="0" TextAlignment="Center" FontFamily="fonts/digital-7.ttf#Digital-7" FontSize="32"></TextBlock>
            <TextBlock x:Name="txtClockHours" Text="06:" Grid.Row="1" Grid.Column="1" TextAlignment="Center" FontFamily="fonts/digital-7.ttf#Digital-7" FontSize="32"></TextBlock>
            <TextBlock x:Name="txtClockMinutes" Text="30:" Grid.Row="1" Grid.Column="2" TextAlignment="Center" FontFamily="fonts/digital-7.ttf#Digital-7" FontSize="32"></TextBlock>
            <TextBlock x:Name="txtClockSeconds" Text="15" Grid.Row="1" Grid.Column="3" TextAlignment="Center" FontFamily="fonts/digital-7.ttf#Digital-7" FontSize="32"></TextBlock>

            <TextBlock x:Name="txtDays" Text="Days" Grid.Row="2" Grid.Column="0"></TextBlock>
            <TextBlock x:Name="txtHours" Text="Hourss" Grid.Row="2" Grid.Column="1"></TextBlock>
            <TextBlock x:Name="txtMinutes" Text="Minutes" Grid.Row="2" Grid.Column="2"></TextBlock>
            <TextBlock x:Name="txtSeconds" Text="Secondss" Grid.Row="2" Grid.Column="3"></TextBlock>

Код

int diffDays, diffHours, diffMinutes, diffSeconds;
        System.Windows.Threading.DispatcherTimer dt = new System.Windows.Threading.DispatcherTimer();
        public HomeScreen()
        {
            //string mDate, mHours, mMinutes, mSeconds;
            InitializeComponent();
            dt.Interval = new TimeSpan(0, 0, 0, 1);
            dt.Tick += new EventHandler(dt_Tick);

            DateTime d1= DateTime.Now;
            DateTime d2 = new DateTime(2012, 1, 15, 10, 45, 00);
            TimeSpan span = d2.Subtract(d1);
            diffSeconds = span.Seconds;
            diffMinutes = span.Minutes;
            diffHours = span.Hours;
            diffDays = span.Days;

            txtClockDays.Text = diffDays.ToString();
            txtClockHours.Text = diffHours.ToString();
            txtClockMinutes.Text = diffMinutes.ToString();
            txtClockSeconds.Text = diffSeconds.ToString();

            dt.Start();
        }

        void dt_Tick(object sender, EventArgs e)
        {
            if (diffSeconds <= 0)
            {
                diffSeconds = 59;
                if (diffMinutes <= 0)
                {
                    diffMinutes = 59;
                    if (diffHours <= 0)
                    {
                        diffHours = 59;
                        if (diffDays <= 0)
                        {
                            diffDays = 0;
                            diffHours = 0;
                            diffMinutes = 0;
                            diffSeconds = 0;
                            dt.Stop();
                        }
                        else
                        {
                            diffDays = diffDays - 1;
                        }
                    }
                    else
                    {
                        diffHours = diffHours - 1;
                    }
                }
                else
                {
                    diffMinutes = diffMinutes - 1;
                }

            }
            else
            {
                diffSeconds = diffSeconds - 1;
            }


            //Dispalying the timer
            if (diffSeconds < 10)
            {
                txtClockSeconds.Text = "0" + diffSeconds.ToString();
            }
            else
            {
                txtClockSeconds.Text = diffSeconds.ToString();
            }


            if (diffMinutes < 10)
            {
                txtClockMinutes.Text = "0" + diffMinutes.ToString();
            }
            else
            {
                txtClockMinutes.Text = diffMinutes.ToString();
            }

            if (diffHours < 10)
            {
                txtClockHours.Text = "0" + diffHours.ToString();
            }
            else
            {
                txtClockHours.Text = diffHours.ToString();
            }

            if (diffDays < 10)
            {
                txtClockDays.Text = "0" + diffDays.ToString();
            }
            else
            {
                txtClockDays.Text = diffDays.ToString();
            }
        }

        private void btnRacenevents_Click(object sender, RoutedEventArgs e)
        {
            NavigationService.Navigate(new Uri("/TestPivot.xaml", UriKind.RelativeOrAbsolute));
        }

для шрифта iиспользуется в этом коде, используйте эту ссылку: http://www.jeffblankenburg.com/2010/10/24/31-days-of-windows-phone-day-24-embedding-fonts/

0 голосов
/ 10 ноября 2011

Работа с дисплеем не должна быть проблемой, в конце концов, это всего лишь Xaml, разработка ее в виде смеси не займет у вас времени.

Что касается получения даты и времени, то общесистемные классы «DateTime» доступны так же, как и в обычном .net, а статические свойства «now» и «UtcNow» дадут вам точное время в этот момент.

Однако получить доступ к классам секундомера .net немного сложнее.

Они больше не находятся в системном пространстве имен, поэтому вместо этого были перемещены в специальное пространство имен телефона.

В своем проекте добавьте ссылку на Microsoft.Phone.dll, и тогда у вас должен быть класс System.Diagnostics.Stopwatch, доступный для использования в вашем коде, который работает так же, как и аналог в мире настольных компьютеров. .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...