C# WPF ContextMenu关闭当MenuItem具有StackPanel时,如何使其即使在第一次单击时仍保持打开状态?

C# WPF ContextMenu关闭当MenuItem具有StackPanel时,如何使其即使在第一次单击时仍保持打开状态?,c#,wpf,C#,Wpf,我创建了一个包含多个菜单项的上下文菜单。 当用户单击标签时,ContextMenu将消失,但我希望它保持打开状态。其目的是避免在用户未点击文本框或复选框时重新打开菜单 XAML代码是: <ContextMenu x:Key="contextMenuListeNew" Name="contextMenuUser" StaysOpen="True"

我创建了一个包含多个菜单项的上下文菜单。 当用户单击标签时,ContextMenu将消失,但我希望它保持打开状态。其目的是避免在用户未点击文本框或复选框时重新打开菜单

XAML代码是:

  <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>