1

複製するには、Microsoft RibbonforWPFをダウンロードしてインストールしてください。

ユーザーがRibbonButtonをクリックしたときにポップアップを表示する必要があります。また、ユーザーがポップアップ以外の場所をクリックしたときにポップアップを非表示にする必要があるため、プロパティをfalseに設定する必要があります。StaysOpen

新しいWPFリボンアプリケーションを作成しました。その後、デフォルトのMainWindow.xaml実装を次のように変更しました。

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <ribbon:Ribbon x:Name="Ribbon">
        <ribbon:Ribbon.ApplicationMenu>
            <ribbon:RibbonApplicationMenu SmallImageSource="Images\SmallIcon.png">
                <ribbon:RibbonApplicationMenuItem Header="Hello _Ribbon"
                                                  x:Name="MenuItem1"
                                                  ImageSource="Images\LargeIcon.png"/>
            </ribbon:RibbonApplicationMenu>
        </ribbon:Ribbon.ApplicationMenu>
        <ribbon:RibbonTab x:Name="HomeTab" 
                          Header="Home">
            <ribbon:RibbonGroup x:Name="Group1" 
                                Header="Group1">
                <ribbon:RibbonButton x:Name="Button1"
                                     LargeImageSource="Images\LargeIcon.png"
                                     Label="Button1"
                                     Click="Button1_Click"/>
                <Popup PlacementTarget="{Binding ElementName=Button1}"
                       StaysOpen="False"
                       Name="p">
                    <TextBlock Background="Green" Text="Popup Text" />
                </Popup>

                <Button Click="Button1_Click" Content="Open popup" />

            </ribbon:RibbonGroup>

        </ribbon:RibbonTab>
    </ribbon:Ribbon> 

</Grid>

およびMainWindow.xaml.cs:

public partial class MainWindow : RibbonWindow
{
    public MainWindow()
    {
        InitializeComponent();

        // Insert code required on object creation below this point.
        p.Opened += new EventHandler(p_Opened);
        p.Closed += new EventHandler(p_Closed);
    }

    void p_Closed(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.Print("closed");
    }

    void p_Opened(object sender, EventArgs e)
    {
        System.Diagnostics.Debug.Print("opened");
    }

    private void Button1_Click(object sender, RoutedEventArgs e)
    {
        p.IsOpen = true;
    }
}

アプリケーションを起動し、通常のボタンをクリックすると、ポップアップが表示されます。しかし、RibbonButtonをクリックすると、もう表示されませんでした。OutputウィンドウでポップアップOpenedのイベントが発生していることがわかりますが、すぐにポップアップのイベントが発生します。Closed

Q:ユーザーがRibbonButtonをクリックしたときにStaysOpen=falseでポップアップを表示する方法

4

1 に答える 1

4

ここに投稿された質問を確認すると (私も自分で試してみました)、解決策の半分は のClickMode="Press"プロパティを使用しRibbonButtonてポップアップを開くことです。これは、将来のすべてのイベントのトリガーを停止するように見え、それRibbonButton.Clickを妨げているものを見つけることができなかったため、別の問題を引き起こします(私はまだWPF初心者です;))

別の解決策は、コントロールのPopup外側に移動することです。その後、期待どおりに動作し始めます。Ribbon

<Grid x:Name="LayoutRoot">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <ribbon:Ribbon x:Name="Ribbon">
        <ribbon:Ribbon.ApplicationMenu>
            <ribbon:RibbonApplicationMenu SmallImageSource="Images\SmallIcon.png">
                <ribbon:RibbonApplicationMenuItem Header="Hello _Ribbon"
                                              x:Name="MenuItem1"
                                              ImageSource="Images\LargeIcon.png"/>
            </ribbon:RibbonApplicationMenu>
        </ribbon:Ribbon.ApplicationMenu>
        <ribbon:RibbonTab x:Name="HomeTab" 
                      Header="Home">
            <ribbon:RibbonGroup x:Name="Group1" 
                            Header="Group1">
                <ribbon:RibbonButton x:Name="Button1"
                                 LargeImageSource="Images\LargeIcon.png"
                                 Label="Button1"
                                 Click="Button1_Click"/>

                <Button Click="Button1_Click" Content="Open popup" />

            </ribbon:RibbonGroup>
        </ribbon:RibbonTab>
    </ribbon:Ribbon>
    <Popup PlacementTarget="{Binding ElementName=Button1}"
                   StaysOpen="False"
                   Name="p">
        <TextBlock Background="Green" Text="Popup Text" />
    </Popup>
</Grid>
于 2013-03-07T06:46:20.383 に答える