Возникли проблемы с пользовательским кодированием панели - не могу понять, как получить доступ к свойствам детей - PullRequest
0 голосов
/ 26 января 2010

Я работаю на временной шкале, которая помечает области аудиосигналов, когда пользователь нажимает кнопку «Пуск» и «Стоп». Пользователь может нажимать кнопку запуска и остановки несколько раз во время сеанса выборки, и время между нажатиями должно отображаться на временной шкале в виде выделенных разделов.

Общий дизайн - это ItemsControl, у которого ItemsPanelTemplate - пользовательская панель. Каждая панель представляет собой звуковую дорожку. Панель имеет свойство зависимостей StartTime и EndTime, которое привязано к данным свойств StartControl и End of UserControl, так что я могу контролировать количество времени просмотра всех дорожек из одной пары свойств. ItemsControl связан с ObservableCollection, а Track является ObservableCollection. Намерение здесь состоит в том, что, когда я добавляю новое выделение, это обновляет трек, а затем я добавляю / перезаписываю трек в ObservableCollection, что должно автоматически обновлять мой графический интерфейс.

Выделение выглядит так:

public class Highlight
{
    public DateTime Start { get; set; }
    public DateTime End { get; set; }
    public string Description { get; set; }

    public Highlight() {}

    public Highlight(DateTime start, DateTime end, string description)
    {
        Start = start;
        End = end;
        Description = description;
    }
}

Я полагаю, что у меня правильно закодированы пользовательский контроль и панель, за исключением одной маленькой детали (на самом деле, самой важной). Когда я нажимаю Start и Stop, я добавляю новый экземпляр Highlight в OC и устанавливаю обычные свойства C # Description, Start и End.

Когда пользователь нажимает кнопку «Конец», и все объекты обновляются, в конце концов вызывается ArrangeOverride для моей Panel, и мне нужно получить свойства Highlight Start и End. Это позволяет мне рассчитать смещение от времени начала трека и нарисовать выделение в нужном месте. Проблема в том, что у меня есть только элементы UIE, с которыми можно работать (Дети группы). Я не могу привести это к своему объекту Highlight, поэтому я предполагаю, что мне нужно где-то настроить привязку данных для Highlight в XAML, чтобы он автоматически извлекал правильное значение свойства C #.

Извините за длинное описание, но я думаю, что моя проблема сводится к этому единственному вопросу - как мне настроить XAML или код позади так, чтобы UIE-элементы моей Panel были правильно привязаны к базовым экземплярам Highlight?

Большое спасибо за помощь заранее. Я многому научился у всех присутствующих на SO, но, несомненно, мне предстоит пройти долгий путь, прежде чем я овладею этими темами.

РЕДАКТИРОВАТЬ - Я был неправ, моя привязка данных для начала и конца для каждого трека не работала. У меня было свойство DependencyProperty в моем UserControl для каждого, и я подумал, что могу привязать к ним данные из XAML, чтобы принудительно изменить размер панели Track, следующим образом:

<ItemsControl.ItemContainerStyle>
    <Style>
        <Setter Property="local:Track.StartTime" Value="{Binding Path=Start}"/>
        <Setter Property="local:Track.EndTime" Value="{Binding Path=End}"/>
    </Style>
</ItemsControl.ItemContainerStyle>

но это не сработало. Я думаю, мне нужно сначала выяснить это, потому что если StartTime и EndTime не будут установлены должным образом, вызов ArrangeOverride не будет выполнен из-за запроса бесконечного размера.

1 Ответ

0 голосов
/ 26 января 2010

Хорошо, наконец-то все заработало. Правильный способ реализовать эту функцию - использовать вложенные свойства на панели «Трек». Затем мне просто нужно было привязать свойства «Начало» и «Конец» к свойствам «Начало» и «Конец» в моем классе Highlight. В какой-то момент у меня возникли проблемы с компиляцией, потому что прикрепленные свойства Start и End, по-видимому, не были обнаружены в моем классе Track, но, к счастью, после перечитывания статьи о MSDN, я понял, что изменил имена свойств без имена методов установки / доступа !!!

...