WPF生成的文件赢得';t编译
本文关键字:编译 文件 WPF | 更新日期: 2023-09-27 18:29:03
在我的WPF应用程序中,我为上下文菜单项(ListBoxItem的上下文菜单)添加了点击事件处理程序。
当我尝试以下方法时:
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Setter Property="ContextMenu">
<Setter.Value>
<ContextMenu>
<MenuItem Header="Remove" Click="RemoveSelectedSchedule"/>
</ContextMenu>
</Setter.Value>
</Setter>
<EventSetter Event="MouseDoubleClick" Handler="ScheduleList_MouseDoubleClick"/>
</Style>
</ListBox.ItemContainerStyle>
并尝试构建,构建失败,并显示以下错误消息:
1> C:''Users''Pawel''Source''Repos''acadiccalendar''academiccalendar.Desktop''obj''Debug''MainWindow.g.cs(113,14113,15):应为错误CS513:}1> C:''Users''Pawel''Source''Repos''acadiccalendar''academiccalendar.Desktop''obj''Debug''MainWindow.g.cs(123,19123,20):错误CS514:{预期1> C:''Users''Pawel''Source''Repos''acadiccalendar''academiccalendar.Desktop''obj''Debug''MainWindow.g.cs(125,9125,10):错误CS1525:表达式项"}"无效1> C:''Users''Pawel''Source''Repos''acadiccalendar''academiccalendar.Desktop''obj''Debug''MainWindow.g.cs(125,10125,11):错误CS1002:;预期
但是,如果删除了Context MenuItem的设置Click事件处理程序,则代码将正确编译和运行。
EDIt事件处理程序当前为空。
void RemoveSelectedSchedule(object sender, RoutedEventArgs e)
{
}
这很奇怪。。。
玩了一段时间后,我得到了它来编译
-
删除代码
<Setter Property="ContextMenu"> <Setter.Value> <ContextMenu> <MenuItem Header="Remove" Click="RemoveSelectedSchedule"/> </ContextMenu> </Setter.Value> </Setter>
-
编译-失败
-
添加第二个EventSetter
-
编译失败
-
添加回代码
<Setter Property="ContextMenu"> <Setter.Value> <ContextMenu> <MenuItem Header="Remove" Click="RemoveSelectedSchedule"/> </ContextMenu> </Setter.Value> </Setter>
- 再次编译-编译
WPF编译器出现问题。。。
编辑1个更好的答案。。。
如果将上下文菜单移到资源部分
<ContextMenu x:Key="ListBoxItemContextMenu">
<MenuItem Header="View" Name="MenuItemView" Click="ContextClicked"/>
</ContextMenu>
并且在Setter中访问它,它似乎可以工作
<Style TargetType="{x:Type ListBoxItem}" BasedOn="{StaticResource {x:Type ListBoxItem}}">
<Setter Property="ContextMenu" Value="{StaticResource ListBoxItemContextMenu}">
</Setter>
<EventSetter Event="MouseDown" Handler="EventSetter_OnHandler1"></EventSetter>
<EventSetter Event="MouseDoubleClick" Handler="EventSetter_OnHandler2"></EventSetter>
</Style>