WPF TabControl 如何在鼠标向上而不是鼠标向下更改选项卡?
Posted
技术标签:
【中文标题】WPF TabControl 如何在鼠标向上而不是鼠标向下更改选项卡?【英文标题】:WPF TabControl How to change Tab on mouse up rather than mouse down? 【发布时间】:2011-09-06 12:22:29 【问题描述】:在 WPF TabControl 中,默认行为是在鼠标按下时更改选定的选项卡。
在我的应用程序中,更改选项卡有时会调整大小,有时会在另一个用户控件上调用鼠标向上事件,因为选项卡控件已移动。
如果我可以将标签页设置为仅在鼠标向上而不是鼠标向下时切换,它将解决问题。
【问题讨论】:
【参考方案1】:您可以像这样使用自定义 TabItem:
public class MyTabItem : TabItem
protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
if (e.Source == this || !this.IsSelected)
return;
base.OnMouseLeftButtonDown(e);
protected override void OnMouseLeftButtonUp(MouseButtonEventArgs e)
if (e.Source == this || !this.IsSelected)
base.OnMouseLeftButtonDown(e); // OR just this.Focus(); OR this.IsSeleded = true;
base.OnMouseLeftButtonUp(e);
【讨论】:
【参考方案2】:您可以订阅 PreviewMouseDown 事件并设置路由事件的 Handled 标志以禁用 mousedown,然后在 MouseUp 上您可以在 TabItem 上设置 IsSelected。这样您就不必创建自定义控件。
XAML
<TabItem Header="My Tab" MouseUp="TabItem_MouseUp" PreviewMouseDown="TabItem_PreviewMouseDown">
<!--Content-->
</TabItem>
C#
private void TabItem_MouseUp(object sender, MouseButtonEventArgs e)
if (sender is TabItem tab && !tab.IsSelected)
tab.IsSelected = true;
//end private void TabItem_MouseUp(object sender, MouseButtonEventArgs e)
private void TabItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
if (sender is TabItem tab && !tab.IsSelected)
e.Handled = true;
//end private void TabItem_PreviewMouseDown(object sender, MouseButtonEventArgs e)
【讨论】:
以上是关于WPF TabControl 如何在鼠标向上而不是鼠标向下更改选项卡?的主要内容,如果未能解决你的问题,请参考以下文章