C# WPF Menuitem ItemsPresenter模板

omvjsjqw  于 2023-08-07  发布在  C#
关注(0)|答案(1)|浏览(112)

我有一个包含多个菜单项的上下文菜单。一个特定的菜单项(“In postfach kopieren”)曾经有许多菜单项作为其子项。问题是,有时在菜单项“在postfach kopieren”中的孩子的数量很大,我希望实现某些功能,如滚动条和搜索功能。我在代码中所做的是,我添加了一个网格作为菜单项“In postfach kopieren”的子项。此网格有三个子项:1)文本标签。2)用户可以在其中输入搜索文本的文本块。3)一个scrollViewer。这个滚动查看器有一个Stackpanel作为它的内容。这个stackpanel有几个菜单项(用户列表)作为其子项。整个控件的功能似乎正在工作。但是当我将鼠标悬停在菜单项“In postfach kopieren”上时,它会打开弹出窗口,并为整个控件突出显示悬停效果。我只想突出显示用户列表菜单项,而不是整个控件。
我试着测试所有相关控件的鼠标输入事件(网格,网格中的Stackpanel)等。无法禁用控件的悬停功能。

var cbtnPostfachKopieren = new System.Windows.Controls.MenuItem();
cbtnPostfachKopieren.Header = "In Postfach kopieren";
cbtnPostfachKopieren.Items.Clear();
var grid = new Grid();
grid.RowDefinitions.Add(new RowDefinition() { Height = GridLength.Auto });
grid.RowDefinitions.Add(new RowDefinition() { Height = new GridLength(150) });
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto });
grid.ColumnDefinitions.Add(new ColumnDefinition() { Width = GridLength.Auto });

var textBlock = new TextBlock();
textBlock.Text = "Search";
Grid.SetRow(textBlock, 0);
Grid.SetColumn(textBlock, 0);
grid.Children.Add(textBlock);

var textBox = new System.Windows.Controls.TextBox();
textBox.TextChanged += TextBox_TextChanged;
textBox.Width = 150;
textBox.Margin = new Thickness(10, 0, 0, 0);
textBox.Text = "Abishek";
Grid.SetRow(textBox, 0);
Grid.SetColumn(textBox, 1);
grid.Children.Add(textBox);

cbtnPostfachKopieren.Items.Add(grid);

var scrollViewer = new ScrollViewer
{
    VerticalScrollBarVisibility = ScrollBarVisibility.Visible,
    Height = 100,
    HorizontalAlignment = HorizontalAlignment.Right
};

scrollViewer.Foreground = Brushes.Brown;
Grid.SetRow(scrollViewer, 1);
Grid.SetColumn(scrollViewer, 0);
Grid.SetColumnSpan(scrollViewer, 2);
grid.Children.Add(scrollViewer);

var stackpanel = new StackPanel();
scrollViewer.Content = stackpanel;
            
for (int i = 0; i < 5; i++)
{
    System.Windows.Controls.MenuItem _btnInPostfachKopierenUserInfo = new System.Windows.Controls.MenuItem();        
    _btnInPostfachKopierenUserInfo.Header = "Abishek Kumar JAin Ravikumar";
    stackpanel.Children.Add(_btnInPostfachKopierenUserInfo);
    _btnInPostfachKopierenUserInfo.Click += _btnInPostfachKopierenUserInfo_Click;
}

字符串
附上一张截图。
Screenshot

x33g5p2x

x33g5p2x1#

你可以用菜单项的控件模板来实现。这是yaml代码来突出显示整个项目。
简单的方法是通过Visual Studio Designer从菜单项生成模板代码并更改它。

相关问题