我有一个普通的C#标签控件。我想在用户右键单击最右侧选项卡标题右侧的空白区域时(标签标题区域中的任何位置都没有选项卡也可以)执行一个函数。
我看着在空白区域放置一个隐藏按钮,但它没有填充空间,是一种非常硬编码的方法。
我还考虑在空白区域创建一个隐藏的标签,但它也不会完全填满空白空间,所需的标题宽度取决于显示的其他标签数量;此外,用户可能会意外地点击它并离开当前选项卡,这不会很好,因为事情会在标签更改时自动发生。
是否有一种优雅的方式来捕捉空白区域的右键?
答案 0 :(得分:0)
我最后通过使用如下事件处理程序设置样式来完成它:
<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支持团队提供!