将eventhandler添加到模板文件中的ContextMenuItem

时间:2014-10-29 21:48:56

标签: c# wpf xaml custom-controls eventhandler

我正在尝试在模板文件中添加contextmenu以及contextmenuitem和handler。以前的东西很好,但VS不会让我在模板文件中的menuitem中添加一个eventhandler,它看起来像是这样

<ControlTemplate TargetType="{x:Type local:CalendarDayView}">
                    <ControlTemplate.Resources>
                        <ContextMenu x:Key="dayEntryContextMenu">
                            <MenuItem Header="Remove entry" Click="removeEntryBtn"/>
                        </ContextMenu>
                    </ControlTemplate.Resources>
                    <Border BorderBrush="Gray" BorderThickness="1" Width="100" Height="100">
                        <Grid Name="contentGrid">
                        <ListBox Name="entriesListBox" Background="LightYellow" ContextMenu="{StaticResource dayEntryContextMenu}">
                            <ListBoxItem>Test entry #1</ListBoxItem>
                            <ListBoxItem>Test entry #2</ListBoxItem>
                            <ListBoxItem>Test entry #3</ListBoxItem>
                        </ListBox>
                        <!-- Date display below -->
                        <TextBlock Name="dateTextBlock" Text="31-Nov" FontFamily="Segoe UI Light" FontSize="18" VerticalAlignment="Bottom" HorizontalAlignment="Right"/>
                        </Grid>
                    </Border>
                </ControlTemplate>

我得到的错误是 错误1“ResourceDictionary”根元素需要x:Class属性来支持XAML文件中的事件处理程序。删除Click事件的事件处理程序,或将x:Class属性添加到根元素。第37行第61位。

有没有办法让这项工作?

1 个答案:

答案 0 :(得分:1)

问题是您的事件处理程序需要在代码隐藏文件中实现,但由于您只有xaml文件后面没有任何* .cs文件,因此VS不知道应该在哪里实现事件处理程序。 / p>

要解决此问题,您需要为xaml文件添加代码隐藏文件。在该代码隐藏文件中,您必须定义resourcedictionary的类(存储ControlTemplate的位置),然后您可以定义&#34; x:class&#34;你的xaml文件中的属性。之后,您应该能够定义事件处理程序。

查看更完整的说明here