【发布时间】:2014-01-15 10:33:45
【问题描述】:
我有一个使用 RibbonControlsLibrary 的简单 WPF 功能区窗口。
在这个窗口中,我有一个包含按钮元素的 RibbonComboBox。我的意图是在单击按钮后关闭 RibbonComboBox 的下拉菜单。我不想操纵 RibbonComboBox 的 IsOpen 属性,因为 Button 应该用于不同的目的。我的想法是处理按钮的 MouseDown 事件,然后将 e.Handled 设置为 false
XAML 看起来像这样
<ribbon:RibbonWindow x:Class="WpfRibbonApplication2.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:ribbon="clr-namespace:Microsoft.Windows.Controls.Ribbon;assembly=RibbonControlsLibrary"
xmlns:my="clr-namespace:WpfRibbonApplication3"
Title="MainWindow"
x:Name="RibbonWindow"
Width="640" Height="480">
<ribbon:Ribbon>
<ribbon:RibbonTab Header="Home">
<ribbon:RibbonGroup Header="Group1">
<ribbon:RibbonComboBox>
<ribbon:RibbonGallery>
<ribbon:RibbonGalleryCategory>
<ribbon:RibbonGalleryItem>
<my:CustomButton Content="Test" />
</ribbon:RibbonGalleryItem>
</ribbon:RibbonGalleryCategory>
</ribbon:RibbonGallery>
</ribbon:RibbonComboBox>
</ribbon:RibbonGroup>
</ribbon:RibbonTab>
</ribbon:Ribbon>
</ribbon:RibbonWindow>
后面的代码如下:
public CustomButton()
{
// Insert code required on object creation below this point.
AddHandler(MouseDownEvent,(RoutedEventHandler)Button_MouseDown,true);
}
private void Button_MouseDown(object sender, RoutedEventArgs e)
{
Console.WriteLine(string.Format("MouseDownEvent, e.Handled = {0}", e.Handled));
e.Handled = false;
}
事件被触发,但功能区下拉菜单仅在第二次按下按钮时才会关闭。有趣的是,我第二次按下按钮时,MouseDown 事件处理程序没有被调用。有人可以给我一些关于如何以干净的方式在第一次点击时关闭功能区的提示吗?
【问题讨论】: