将上下文菜单添加到自定义日历控件(WPF VB.Net)

时间:2018-08-09 20:44:39

标签: wpf vb.net xaml

因此,我有一个自定义类,该类继承自WPF日历日历,该类使用一些爵士乐修改了默认模板,以在某些日期添加突出显示,并且到目前为止效果很好。

现在,我还要向每个dateitem按钮(类型为CalendarDayButton)添加一个上下文菜单。我可以打开一个工作上下文菜单,但是当我尝试添加click事件时,它似乎根本没有触发。

快速的流程概要:

我有一个HighlightCalendar.vb文件,该文件定义了我的控件文件夹中的类。

使用复制和修改后的xaml模板设置样式,该模板位于我的主题文件夹中,文件名HighlightCalendar.xaml

主题文件夹中也有一个HighlightCalendar.xaml.vb文件。它定义为Partial Public Class HighlightResources,并且我的模板xaml的标头具有声明的x:Class = HighlightResources。

使用此设置,Visual Studio允许我在“属性/事件”选项卡中为上下文菜单的click事件定义方法名称,并自动在我的HighlightCalendar.xaml.vb中创建具有正确标题的子项。 >

但是,当我单击上下文菜单项时,永远不会调用该子控件。我将其设置为一个简单的MessageBox.Show(“ Test”),什么也没有发生。在子节点上设置断点,永远不会触发。请让我知道我想念的东西。谢谢。

代码段:

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>

1 个答案:

答案 0 :(得分:1)

这是一个与在setter中定义上下文菜单有关的错误。如果将上下文菜单定义为单独的资源,然后在设置器中引用它,则它将正常工作。

有关更多详细信息,请参见此链接:Why "Setting event handlers inside a Setter.Value structure" gives compilation error?

感谢Bijan为我提供了帮助。