Wpf 工具栏更改所选项目

Wpf 工具栏更改所选项目,wpf,toolbar,Wpf,Toolbar,我已经创建了一个工具栏,它有3个按钮类型的项目,并且有足够的宽度来显示1个项目(其余的在下拉框中)。如何更改当我单击下拉框中的某个项目时,可见项目会变为该项目的行为?您可以将单击项目的Toolbar.OverflowMode更改为OverflowMode。从不 并将其他项的Toolbar.OverflowMode设置为OverflowMode。始终 例如: <ToolBar Width="80" HorizontalAlignment="Left" VerticalAlignment="T

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

您可以将单击项目的Toolbar.OverflowMode更改为OverflowMode。从不 并将其他项的Toolbar.OverflowMode设置为OverflowMode。始终

例如:

<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);
}

还有其他更通用的方法吗?只有在运行时才知道按钮的数量。是的,您可以迭代工具栏项集合并将OverflowMode设置为所有未单击按钮的子项。请参阅我的更新答案以获取示例好吧,这是通用的,但我需要将事件添加到每个按钮。是否有其他方法?是的,您可以在工具栏中处理附加的单击事件:
ButtonBase.click=“toolbar\u click”
,然后执行此操作:
if(e.Source!=toolbar)UpdateToolbar(e.Source)。需要进行检查,否则将单击工具栏下拉按钮。
  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);
      }
    }
  }