C# WPF Menuitem ItemsPresenter 模板

问题描述 投票:0回答:1

我有一个上下文菜单,其中包含多个菜单项。一个特定的菜单项(“In postfach kopieren”)曾经有许多菜单项作为其子项。问题是,有时菜单项“In postfach kopieren”中的子项数量很大,我希望实现某些功能,例如滚动条和搜索功能。我在代码中所做的是添加一个网格作为菜单项“In postfach kopieren”的子项。该网格有三个子项:1) 文本标签。 2) 用户可以在其中输入搜索文本的文本块。 3)滚动查看器。该滚动查看器有一个 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

wpf menuitem
1个回答
0
投票

您可以使用菜单项的控制模板来实现这一点。这是突出显示整个项目的 yaml 代码。

最简单的方法是通过 Visual Studio Designer 从菜单项生成模板代码并更改它。

© www.soinside.com 2019 - 2024. All rights reserved.