5

すべてのアイテムの外観を変更する、カスタマイズされたコンテキストメニューを作成しました。これらのアイテムには、コンボボックスやボタンなどのさまざまなコントロールが含まれています。ボタンが押された場合、またはコンボボックス項目が選択された場合にメニューを閉じたいと思います。現在、メニューは開いたままです。ヒントを教えていただけますか?

これは、私が行ったことを示すための簡略化されたコードです。

<ContextMenu StaysOpen="False">
    <MenuItem>
        <MenuItem.Template>
            <ControlTemplate>
                <Grid MinWidth="200">
                    <Button Command="{Binding SomeWorkingCommandBinding}">OK</Button>
                </Grid>
            </ControlTemplate>
        </MenuItem.Template>
    </MenuItem>
</ContextMenu>

前述のように、[OK]ボタンを押したらメニューを閉じたいと思います。

アップデート

次のボタン(またはその他のコントロール)は、BlendSDKを必要とせずにトリックを実行します。

<Button.Triggers>
    <EventTrigger RoutedEvent="Button.Click">
        <BeginStoryboard>
            <Storyboard>
                <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="(ContextMenu.IsOpen)" Storyboard.Target="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}}">
                    <DiscreteObjectKeyFrame KeyTime="0:0:0">
                        <DiscreteObjectKeyFrame.Value>
                            <sys:Boolean>False</sys:Boolean>
                        </DiscreteObjectKeyFrame.Value>
                    </DiscreteObjectKeyFrame>
                </ObjectAnimationUsingKeyFrames>
            </Storyboard>
        </BeginStoryboard>
    </EventTrigger>
</Button.Triggers>
4

1 に答える 1

3

Blend SDKChangePropertyActionの一部である を使用して、Button がクリックされるとすぐに ContextMenuのプロパティを変更します。IsOpen

<ContextMenu x:Name="MyContextMenu">
  <MenuItem>
    <MenuItem.Template>
        <ControlTemplate>
            <Grid MinWidth="200">
                <Button Command="{Binding SomeWorkingCommandBinding}" Content="OK">
                    <i:Interaction.Triggers>
                        <i:EventTrigger EventName="Click">
                            <ei:ChangePropertyAction TargetObject="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=ContextMenu}}" PropertyName="IsOpen" Value="False"/>
                        </i:EventTrigger>
                    </i:Interaction.Triggers>
                </Button>
            </Grid>
        </ControlTemplate>
    </MenuItem.Template>
  </MenuItem>
</ContextMenu>

次の名前空間が必要です。

xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"                  
xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
于 2012-12-23T09:11:25.937 に答える