在我的WPF窗口中,有一个带有上下文菜单的Button。 我将上下文菜单模板定义为静态资源。在上下文菜单ControlTemplate中,有一个ListView。我已经通过DataBinding绑定了这个ListView ItemTemplate。
现在,我需要在Button鼠标悬停时显示此上下文菜单。 当我右键单击按钮时,上下文菜单也显示,我的绑定也正在工作,能够更新ListView控件中的项目。
但是当我尝试在Button PreviewMouseMove事件上显示ContextMenu时,绑定不起作用。
用于打开上下文菜单的代码:
btn_1.ContextMenu.IsOpen = true;
我的Listview控件为空。
请建议如何在PreviewMouseMove事件上填充ListView项。
在WPF窗口中
public mainWindow()
{
MyViewModel oModel = new MyViewModel();
InitializeComponent();
this.DataContext = oModel.prd1;
}
在XAML中按钮控制
<Button Name="brd_Product1" Content={Binding ProductName} PreviewMouseMove="brd_PreviewMouseMove">
<Button.ContextMenu>
<ContextMenu Template="{StaticResource tmpl_Offer}"
ContextMenuService.VerticalOffset="-25" ContextMenuService.HorizontalOffset="50">
</ContextMenu>
</Button.ContextMenu>
</Button>
并在MyViewModel类中
public cOffer prd1{ get; set; }
public MyViewModel()
{
cOffer prd1 = new cOffer()
{
ProductName = "Product1",
listFeatures = new List<string> {
"Features1",
"Features2",
"Features3"},
};
}
控制模板定义
<ControlTemplate x:Key="tmpl_Offer"
TargetType="{x:Type ContextMenu}">
<Border CornerRadius="5" Background="#3A3A3A">
<ListView Name="lview_FeatureList"
ItemsSource="{Binding listFeatures}"ScrollViewer.CanContentScroll="False" ScrollViewer.HorizontalScrollBarVisibility="Hidden" ScrollViewer.VerticalScrollBarVisibility="Hidden" IsHitTestVisible="False">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock VerticalAlignment="Center"
Text="{Binding}"
TextTrimming="CharacterEllipsis"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Border>
</ControlTemplate>
public class cOffer
{
public string ProductName { get; set; }
public List<string> listFeatures { get; set; }
}