C# WPF ContextMenu关闭当MenuItem具有StackPanel时,如何使其即使在第一次单击时仍保持打开状态?
我创建了一个包含多个菜单项的上下文菜单。 当用户单击标签时,ContextMenu将消失,但我希望它保持打开状态。其目的是避免在用户未点击文本框或复选框时重新打开菜单 XAML代码是:C# WPF ContextMenu关闭当MenuItem具有StackPanel时,如何使其即使在第一次单击时仍保持打开状态?,c#,wpf,C#,Wpf,我创建了一个包含多个菜单项的上下文菜单。 当用户单击标签时,ContextMenu将消失,但我希望它保持打开状态。其目的是避免在用户未点击文本框或复选框时重新打开菜单 XAML代码是: <ContextMenu x:Key="contextMenuListeNew" Name="contextMenuUser" StaysOpen="True"
<ContextMenu
x:Key="contextMenuListeNew"
Name="contextMenuUser"
StaysOpen="True"
>
<MenuItem
Header="Justifier"
Name="contextMenuJustifier"
StaysOpenOnClick="True"
>
</MenuItem>
<MenuItem
Header="Corriger"
Name="MenuItemModifier"
StaysOpenOnClick="True"
IsSubmenuOpen="True"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
>
<StackPanel
Orientation="Horizontal"
Margin="2,0,0,0"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
>
<Label
Name="LabelDispo"
Content="Dispo"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
/>
<TextBox
Name="TextBoxDispoBrute"
Text=""
VerticalContentAlignment="Center"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
Width="60"
/>
<Label
Name="LabelPourcentage"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
Content="%" />
<CheckBox
Name="CheckBoxAllCells"
Margin="0,5,0,0"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
Content="dont les 100%"
/>
</StackPanel>
<StackPanel
Orientation="Horizontal"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
Margin="0,5,0,0">
<Label
Content="Commentaire"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"/>
<TextBox
Name="TextBoxCommentaireDispo"
Height="25"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
Width="135"
VerticalContentAlignment="Center"
Text=""
/>
</StackPanel>
<Separator />
<Button
Content="OK"
MouseLeftButtonDown="MenuItem_MouseLeftButtonDown"
Name="ButtonValiderDispo"
Width="80"
Height="20"
/>
</MenuItem>
<MenuItem
Header="RéInitialiser"
Name="MenuItemReset"
StaysOpenOnClick="True"
>
</MenuItem>
</ContextMenu>
使用此代码,上下文菜单仅在第二次单击后保持打开状态。在第一个菜单上,ContextMenu关闭,但在它保持打开状态之后
你知道怎么在第一次点击的时候做吗
最好的祝愿,基本上,您对
菜单项的内容有一点误解。本身不是MenuItem
或Separator
的内容元素将被包装在可视化树中的MenuItem
中。那么下面
<MenuItem Header="Corriger" StaysOpenOnClick="True">
<StackPanel Orientation="Horizontal" Margin="2,0,0,0">
<Label Content="Dispo" />
<TextBox Text="" VerticalContentAlignment="Center" Width="60" />
<Label Content="%" />
<CheckBox Margin="0,5,0,0" Content="dont les 100%" />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<Label Content="Commentaire"/>
<TextBox Height="25" Width="135" VerticalContentAlignment="Center" Text="" />
</StackPanel>
<Separator />
<Button Content="OK" Width="80" Height="20" />
</MenuItem>
如果您不喜欢整个区域的突出显示,请使用多个显式子菜单项或带有样式和/或模板的更显式设计。基本上,您对菜单项的内容有一点误解。本身不是MenuItem
或Separator
的内容元素将被包装在可视化树中的MenuItem
中。那么下面
<MenuItem Header="Corriger" StaysOpenOnClick="True">
<StackPanel Orientation="Horizontal" Margin="2,0,0,0">
<Label Content="Dispo" />
<TextBox Text="" VerticalContentAlignment="Center" Width="60" />
<Label Content="%" />
<CheckBox Margin="0,5,0,0" Content="dont les 100%" />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<Label Content="Commentaire"/>
<TextBox Height="25" Width="135" VerticalContentAlignment="Center" Text="" />
</StackPanel>
<Separator />
<Button Content="OK" Width="80" Height="20" />
</MenuItem>
如果您不喜欢整个区域的突出显示,请使用多个显式子菜单项或带有样式和/或模板的更显式设计。请参见,要防止菜单项关闭菜单,您必须使用一种技巧,将内容放在菜单项中。标题
(可以嵌套在其他菜单项中)
:
请参见,要防止菜单项关闭菜单,您必须使用一种技巧,将内容放在菜单项标题中(可以嵌套在其他菜单项中)
:
你好,非常感谢这正是我想要的。事实上,我不知道除了MenuItem和Separator之外的任何控件都被包装到MenuItem中。您好,非常感谢,这正是我想要的。事实上,我不知道除了MenuItem和Separator之外的任何控件都被包装到MenuItem中。
<MenuItem Header="Corriger" StaysOpenOnClick="True">
<MenuItem>
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Margin="2,0,0,0">
<Label Content="Dispo" />
<TextBox Text="" VerticalContentAlignment="Center" Width="60" />
<Label Content="%" />
<CheckBox Margin="0,5,0,0" Content="dont les 100%" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
<MenuItem>
<MenuItem.Header>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<Label Content="Commentaire"/>
<TextBox Height="25" Width="135" VerticalContentAlignment="Center" Text="" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
<Separator />
<MenuItem>
<MenuItem.Header>
<Button Content="OK" Width="80" Height="20" />
</MenuItem.Header>
</MenuItem>
</MenuItem>
<MenuItem Header="Corriger" StaysOpenOnClick="True">
<MenuItem StaysOpenOnClick="True">
<MenuItem.Header>
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="2,0,0,0">
<Label Content="Dispo" />
<TextBox Text="" VerticalContentAlignment="Center" Width="60" />
<Label Content="%" />
<CheckBox Margin="0,5,0,0" Content="dont les 100%" />
</StackPanel>
<StackPanel Orientation="Horizontal" Margin="0,5,0,0">
<Label Content="Commentaire"/>
<TextBox Height="25" Width="135" VerticalContentAlignment="Center" Text="" />
</StackPanel>
<Separator />
<Button Content="OK" Width="80" Height="20" />
</StackPanel>
</MenuItem.Header>
</MenuItem>
</MenuItem>
<Grid Background="White">
<Grid.ContextMenu>
<ContextMenu StaysOpen="True"> <!-- important -->
<MenuItem Header="1" />
<MenuItem Header="2"
StaysOpenOnClick="True"> <!-- important -->
<MenuItem StaysOpenOnClick="True"> <!-- nested MenuItem -->
<MenuItem.Header>
<TextBox Width="60" /> <!-- content goes here -->
</MenuItem.Header>
</MenuItem>
</MenuItem>
<MenuItem Header="3" />
</ContextMenu>
</Grid.ContextMenu>
</Grid>