【问题标题】:How to capture RightMouse Click in empty area of tab control?如何在选项卡控件的空白区域捕获鼠标右键?
【发布时间】:2015-08-16 23:53:16
【问题描述】:
我有一个普通的 C# 选项卡控件。我想在用户右键单击最右侧选项卡标题右侧的空白区域时执行一个功能(选项卡标题区域中不是选项卡的任何地方也可以)。
我查看了在空白区域放置一个隐藏按钮,但它不会填充空间并且是一种非常硬编码的方法。
我还研究了在空白区域创建一个隐藏选项卡,但它也不会完全填充空白空间,并且所需的标题宽度取决于显示的其他选项卡的数量;此外,用户可能会不小心点击它并离开当前选项卡,这并不好,因为选项卡更改时会自动发生。
有没有优雅的方法来捕捉空白区域的右键单击?
【问题讨论】:
标签:
c#
tabs
controls
area
【解决方案1】:
我最终通过使用这样的事件处理程序设置样式来做到这一点:
<Style x:Key="{dxt:DXTabControlInternalThemeKey ResourceKey=PanelContainerTopLayoutStyle, IsThemeIndependent=True}" TargetType="{x:Type dx:TabPanelContainer}" BasedOn="{StaticResource {dxt:DXTabControlInternalThemeKey ResourceKey=PanelContainerTopLayoutStyle}}">
<EventSetter Event="PreviewMouseRightButtonDown" Handler="DXTabControl_PreviewMouseRightButtonDown"/>
<Setter Property="Background" Value="Transparent"/>
</Style>
然后我查看了事件处理程序,看看是否有这样的父对象:
private void tabControl_PreviewMouseRightButtonDown(object sender, MouseButtonEventArgs e) {
DXTabItem parentObject = DevExpress.Xpf.Core.Native.LayoutHelper.FindParentObject<DXTabItem>(e.OriginalSource as DependencyObject);
// If the click happened over an empty area (i.e., no parent object was found), then toggle the admin button
if (parentObject == null) {
if (tabItem_Admin.Visibility == System.Windows.Visibility.Visible)
tabItem_Admin.Visibility = System.Windows.Visibility.Collapsed;
else
tabItem_Admin.Visibility = System.Windows.Visibility.Visible;
}
}
此解决方案使用 DevExpress 库,由优秀的 DevExpress 支持团队提供!