簡體   English   中英

ContextMenu中的WPF按鈕需要StaysOpenOnClick

[英]WPF Button in ContextMenu needs StaysOpenOnClick

我在其中使用帶按鈕的ContextMenu。 每當按下特殊按鈕時,我都希望關閉ContextMenu。 我看到了一個名為“StaysOpenOnClick”的MenuItem的可能性......這種方法非常好。

這就是我需要的Button ..特別是XAML唯一的解決方案,如果有人可以提供幫助,那將是很好的!

提前致謝。

我不完全確定你在追求什么,但這里有一個帶按鈕的上下文菜單:

<TextBlock
    Text="Hello, world!">
    <TextBlock.ContextMenu>
        <ContextMenu x:Name="contextMenu">
            <MenuItem>
                <MenuItem.Header>
                    <Button Content="MyButton" Click="OnMenuButtonClick" />
                </MenuItem.Header>
            </MenuItem>
        </ContextMenu>
    </TextBlock.ContextMenu>
</TextBlock>

如果您按下按鈕單擊,將關閉上下文菜單:

private void OnMenuButtonClick(object sender, RoutedEventArgs e)
{
    contextMenu.IsOpen = false;
}

(但不是僅限XAML的解決方案。)

您可以通過使用BooleanAnimationUsingKeyFrames設置其IsOpen屬性的動畫來關閉ContextMenu。 這是僅限XAML的解決方案:

<Grid Background="Yellow" Width="50" Height="50">
    <Grid.Resources>
        <Storyboard x:Key="sb">
            <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen">
                <DiscreteBooleanKeyFrame KeyTime="0" Value="False" />
            </BooleanAnimationUsingKeyFrames>
        </Storyboard>
    </Grid.Resources>
    <Grid.ContextMenu>
        <ContextMenu x:Name="contextMenu">
            <MenuItem>
                <MenuItem.Header>
                    <Button Content="TheButton" Click="OnButtonClick" />
                </MenuItem.Header>
            </MenuItem>
            <ContextMenu.Triggers>
                <EventTrigger RoutedEvent="ButtonBase.Click">
                    <BeginStoryboard Storyboard="{StaticResource sb}" />
                </EventTrigger>
            </ContextMenu.Triggers>
        </ContextMenu>
    </Grid.ContextMenu>
</Grid>

這個解決方案有效,但現在ContextMenu中的所有按鈕都關閉了ContextMenu。 我只想讓它只用一個名為“設置”的按鈕關閉。

在這種情況下,您可以將EventTrigger的SourceName屬性設置為x:“設置”按鈕的名稱:

<Grid Background="Yellow" Width="50" Height="50">
        <Grid.Resources>
            <Storyboard x:Key="sb">
                <BooleanAnimationUsingKeyFrames Storyboard.TargetProperty="IsOpen">
                    <DiscreteBooleanKeyFrame KeyTime="0" Value="False" />
                </BooleanAnimationUsingKeyFrames>
            </Storyboard>
        </Grid.Resources>
        <Grid.ContextMenu>
            <ContextMenu x:Name="contextMenu">
                <MenuItem>
                    <MenuItem.Header>
                        <Button Content="Settings" x:Name="settingsButton" />
                    </MenuItem.Header>
                </MenuItem>
                <MenuItem>
                    <MenuItem.Header>
                        <Button Content="About" />
                    </MenuItem.Header>
                </MenuItem>
                <ContextMenu.Triggers>
                    <EventTrigger RoutedEvent="ButtonBase.Click" SourceName="settingsButton">
                        <BeginStoryboard Storyboard="{StaticResource sb}" />
                    </EventTrigger>
                </ContextMenu.Triggers>
            </ContextMenu>
        </Grid.ContextMenu>
 </Grid>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM