要重现,请下载并安装Microsoft Ribbon for WPF。
当用户点击 RibbonButton 时,我需要显示弹出窗口。此外,当用户点击弹出窗口时,我需要隐藏弹出窗口,因此我必须将StaysOpen
属性设置为 false
我创建了一个新的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
事件被引发,但随后 Popup 的Closed
事件>被提出。
问:当用户点击RibbonButton
时,如何使用StaysOpen = false显示弹出窗口答案 0 :(得分:3)
检查发布的问题here(我自己也尝试过),解决方案的一半是使用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>