Итак, у меня есть собственный класс, который наследуется от стандартного календаря WPF, который изменяет шаблон по умолчанию с некоторым джазом, чтобы добавить выделение для определенных дат, и пока он отлично работает.
Теперь я также хотел бы добавить контекстное меню к каждой кнопке элемента даты (тип CalendarDayButton). Я могу вызвать рабочее контекстное меню, но когда я пытаюсь добавить событие щелчка, оно вообще не срабатывает.
Краткое изложение процесса:
У меня есть файл HighlightCalendar.vb, который определяет класс в моей папке элементов управления.
Он оформлен с использованием скопированного и измененного шаблона xaml, который находится в папке моих тем с именем файла HighlightCalendar.xaml.
Также есть файл HighlightCalendar.xaml.vb, который находится в папке тем. Он определен как Partial Public Class HighlightResources, а в заголовке моего шаблона xaml объявлен x: Class = HighlightResources.
При такой настройке Visual Studio позволяет мне определять имя метода для события щелчка в моем контекстном меню на вкладке свойств / событий и автоматически создает подпрограмму с соответствующим заголовком в моем HighlightCalendar.xaml.vb
Однако подпрограмма никогда не вызывается, когда я нажимаю на пункт контекстного меню. Я установил для него простой MessageBox.Show («Тест»), и ничего не произошло. Установив точку останова на сабвуфере, он никогда не запускается. Пожалуйста, дайте мне знать, что мне не хватает. Спасибо.
Фрагменты кода:
HighlightCalendar.xaml.vb (скрытый код шаблона)
Partial Public Class HighlightResources
Inherits ResourceDictionary
Private Sub dayClick(sender As Object, e As RoutedEventArgs)
MessageBox.Show("test")
End Sub
End Class
HighlightCalendar.xaml (шаблон)
заголовок:
<ResourceDictionary xmlns = "http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x = "http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local = "clr-namespace:WinSurvWPF"
x:Class = "HighlightResources">
Код стиля:
<Style x:Key = "HighlightCalendarDayButtonStyle"
TargetType = "{x:Type CalendarDayButton}">
<Setter Property = "ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header = "test"
Click = "dayClick"/>
</ContextMenu>
</Setter.Value>
</Setter>
Я также попробовал событие ввода мыши, и, похоже, ничего не срабатывает. В моем коде ничего не пропало, верно? Это просто ошибка? Это мой первый раз, когда я использую вторичный файл программной части для настраиваемого элемента управления, поэтому я не уверен, все ли делаю правильно.
Я также подозреваю, что это может быть связано с этой ошибкой: stackoverflow.com/q/5634022/366064
Это абсолютная проблема. Определение контекстного меню как отдельного ресурса и ссылки на него отдельно в шаблоне решили все мои проблемы. Спасибо, Биджан!
Это ошибка, связанная с определением контекстного меню в сеттере. Он работает правильно, если вы определяете контекстное меню как отдельный ресурс, а затем ссылаетесь на него в установщике.
См. Эту ссылку для более подробной информации: Почему «Установка обработчиков событий внутри структуры Setter.Value» дает ошибку компиляции?
Спасибо Биджан за отслеживание этого для меня.
похоже на ошибку. mouseleftbuttonup и command тоже не работают.