Вызовите ContextMenu, когда IsMouseOver на кнопке, используя только XAML - PullRequest
1 голос
/ 15 октября 2011

Я пытаюсь использовать XAML (только без кода) для вызова ContextMenu кнопки.

У меня есть эта кнопка здесь

<Button x:Name="btn" Style="{StaticResource mybutton}" >
<Button.ContextMenu>
    <ContextMenu>
        <TextBlock Text="Information"/>
    </ContextMenu>
</Button.ContextMenu>
</Button>

Стиль кнопкиздесь

<Style TargetType="{x:Type Button}" x:Key="mybutton">
<Setter Property="Template">
    <Setter.Value>
        <ControlTemplate TargetType="{x:Type Button}">
            <ControlTemplate.Triggers>
                <Trigger Property="IsMouseOver" Value="True">
                    <Setter Property="ContextMenu.IsOpen" Value="True"/>
                </Trigger>
            </ControlTemplate.Triggers>
        </ControlTemplate>
    </Setter.Value>
</Setter>
</Style>

Мой гугл-фу подводит меня к тому, что кажется простым решением.Я действительно предпочел бы избегать использования codebehind (события MouseEnter / MouseLeave).

Заранее спасибо.

Ответы [ 2 ]

2 голосов
/ 16 октября 2011

Попробуйте применить «Setter» для ContextMenu в ControlTemplate, указав его имя в свойстве «TargetName».Например:

<Button Width="100" Height="100" x:Name="btn">
        <Button.Style>
            <Style TargetType="Button">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <Border CornerRadius="2" BorderThickness="3" BorderBrush="DarkGray" x:Name="border">
                                <Border.ContextMenu>
                                    <ContextMenu x:Name="cmenu">
                                        <TextBlock>Information</TextBlock>
                                    </ContextMenu>
                                </Border.ContextMenu>
                            </Border>
                            <ControlTemplate.Triggers>
                                <Trigger Property="IsMouseOver" Value="True">
                                    <Setter Property="ContextMenu.IsOpen" Value="True" TargetName="cmenu"/>
                                </Trigger>
                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </Button.Style>
0 голосов
/ 15 октября 2011

Я думаю, это то, что вы хотите - http://social.msdn.microsoft.com/forums/en-US/wpf/thread/adafe007-9637-4f28-8366-8f14ead2bd75

All you need to do is capture the mouse event that you want to trigger the context menu.
...