WPF Slider и даты - PullRequest
       7

WPF Slider и даты

3 голосов
/ 22 сентября 2010

Я хочу сделать слайдер для выбора даты.Например, каждый час в последние два дня.Также слайдер должен иметь внизу легенду со значениями.Как я мог это сделать?

Я сделал слайдер с контекстом данных как DoubleCollection из общего числа часов в дате и изменил подсказку, используя собственный ValueConverter.Но когда я меняю значение, всплывающая подсказка показывает реальные значения - общее количество часов в дате.Также я не знаю, как добавить легенду.

1 Ответ

3 голосов
/ 22 сентября 2010

Вот рабочий пример. Сначала мы создаем ползунок от 0 до 48, округленный до целых значений (TickFrequency="1" IsSnapToTickEnabled="True"), затем добавляем TextBlock, связанный со значением ползунка.

A ValueConverter используется для преобразования значения 0-48 в дату.

<Window x:Class="StackOverflow2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:StackOverflow2"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <local:HourToDateConverter x:Key="MyHourConverter"/>
    </Window.Resources>
    <StackPanel>
        <Slider x:Name="MySlider" Minimum="0" Maximum="48" TickFrequency="1" IsSnapToTickEnabled="True"/>
        <TextBlock Text="{Binding ElementName=MySlider, Path=Value, Converter={StaticResource MyHourConverter}}" HorizontalAlignment="Center"/>
    </StackPanel>
</Window>

И код позади:

using System;
using System.Globalization;
using System.Windows;
using System.Windows.Data;

namespace StackOverflow2
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }
    public class HourToDateConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            object result = DependencyProperty.UnsetValue;
            if (value is double)
                result = DateTime.Now.Date.AddHours((double)value);
            return result;
        }
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

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