2013-03-06 77 views
1

若要复制,请下载并安装Microsoft Ribbon for WPF如何在用户单击RibbonButton时用StaysOpen = false显示弹出菜单

我需要显示弹出窗口当用户点击RibbonButton。此外,我需要隐藏弹出窗口当用户点击任何地方,但弹出窗口,所以我将不得不将StaysOpen属性设置为虚假

我已经创建了一个新的WPF Ribbon应用程序。在那之后,我改变了默认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; 
    } 
} 

当我启动应用程序,点击普通按钮,我可以看到Popup。但是当我点击RibbonButton时,我再也看不到它了。我可以在Output窗口看到Opened事件Popup被提出,但随即立即Closed事件Popup被提出。

问:如何使用StaysOpen显示弹出=假,当用户点击RibbonButton

回答

3

检查问题发布here(我曾尝试它自己也一样),该解决方案的一半是使用ClickMode="Press"RibbonButton的属性使弹出窗口打开。这就产生了另一个问题,因为它似乎阻止触发所有未来RibbonButton.Click事件,我还没有设法找到是什么阻止它(我仍然是一个WPF小白;))

另一种解决方案是移动PopupRibbon外控制,然后它开始按预期行事。

<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> 
相关问题