Reputation: 12855
I have the following code:
XAML:
<Window x:Class="ContextMenuIssue.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox MouseRightButtonUp="TextBox_OnMouseRightButtonUp">
<TextBox.ContextMenu>
<ContextMenu ItemsSource="{Binding Items}"></ContextMenu>
</TextBox.ContextMenu>
</TextBox>
</Grid>
</Window>
Code behind:
namespace ContextMenuIssue
{
class Model
{
public Model()
{
_items = new List<string> {"A", "B", "C"};
}
private List<string> _items;
public List<string> Items
{
get { return _items; }
set { _items = value; }
}
}
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new Model();
}
private void TextBox_OnMouseRightButtonUp(object sender, MouseButtonEventArgs e)
{
//TextBox textBox = ((TextBox) sender);
//textBox.ContextMenu.IsOpen = true;
//e.Handled = true;
}
}
}
When I run it and right click on the textbox, I get a context menu populated, as expected by 3 items (A, B and C). However, if I try to open the context menu explictely, by commenting out the code in TextBox_OnMouseRightButtonUp
I get an empty context menu.
When I was trying to debug it, it seems that the context menu object exists, but it is empty and uninitialized, e.g, its ItemsSource property is set to null.
Anyone has an idea why it happens?
Upvotes: 2
Views: 903
Reputation: 4502
ContextMenu does not belong to the element tree, and because of this, the DataContext property cannot be propagated to the ContextMenu. To workaround this, manually set the data context for the ContextMenu in your OnMouseRightButtonUp:
textBox.ContextMenu.DataContext = this.DataContext;
Upvotes: 3