【问题标题】:ToolBar change selected item工具栏更改所选项目
【发布时间】:2012-08-17 18:08:24
【问题描述】:

我创建了一个工具栏,它有 3 个按钮类型的项目,并且有足够的宽度来显示 1 个项目(其余在下拉框中)。如何更改当我单击下拉框中的项目时可见项目更改为该项目的行为?

【问题讨论】:

    标签: wpf toolbar


    【解决方案1】:

    您可以将点击项的Toolbar.OverflowMode更改为OverflowMode.Never 以及其他项的Toolbar.OverflowMode为OverflowMode.Always

    例子:

    <ToolBar Width="80" HorizontalAlignment="Left" VerticalAlignment="Top">
      <Button Name="btn1" ToolBar.OverflowMode="Never" Click="btn1_Click">Button 1</Button>
      <Button Name="btn2" ToolBar.OverflowMode="Always" Click="btn2_Click">Button 2</Button>
      <Button Name="btn3" ToolBar.OverflowMode="Always" Click="btn3_Click">Button 3</Button>
    </ToolBar>
    
    
    private void btn1_Click(object sender, RoutedEventArgs e)
    {
      ToolBar.SetOverflowMode(btn1, OverflowMode.Never);
      ToolBar.SetOverflowMode(btn2, OverflowMode.Always);
      ToolBar.SetOverflowMode(btn3, OverflowMode.Always);
    }
    
    private void btn2_Click(object sender, RoutedEventArgs e)
    {
      ToolBar.SetOverflowMode(btn1, OverflowMode.Always);
      ToolBar.SetOverflowMode(btn2, OverflowMode.Never);
      ToolBar.SetOverflowMode(btn3, OverflowMode.Always);
    }
    
    private void btn3_Click(object sender, RoutedEventArgs e)
    {
      ToolBar.SetOverflowMode(btn3, OverflowMode.Never);
      ToolBar.SetOverflowMode(btn1, OverflowMode.Always);
      ToolBar.SetOverflowMode(btn2, OverflowMode.Always);
    }
    

    一种更通用的方法:

      UIElement element = sender as UIElement;
      if (element != null) 
      {
        ToolBar.SetOverflowMode(element, OverflowMode.Never);
    
        foreach (var child in toolbar.Items) 
        {
          if (child is UIElement && child != element) 
          {
            ToolBar.SetOverflowMode((UIElement)child, OverflowMode.Always);
          }
        }
      }
    

    【讨论】:

    • 还有其他更通用的方法吗?按钮的数量只有在运行时才知道。
    • 是的,您可以迭代工具栏项集合并将 OverflowMode.Always 设置为所有未单击按钮的子项。有关示例,请参阅我的更新答案
    • 好吧,它是通用的,但我需要将事件添加到每个按钮。还有其他方法吗?
    • 是的,您可以在工具栏中处理附加的点击事件:ButtonBase.Click="toolbar_Click",然后执行此操作:if (e.Source != toolbar) UpdateToolbar(e.Source);。检查是必需的,否则您将获得工具栏下拉按钮上的点击。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-29
    • 1970-01-01
    相关资源
    最近更新 更多