我对此的解决方案是创建一个具有类似“弹簧”功能的标签控件,这样它就可以在工具栏上的按钮之间填充空白,从而“右对齐”工具栏的组合框(或任何其他控件)需要“右对齐”。
为此,我创建了一个 WidthConverter,它将获取 ToolBar 控件的实际宽度,然后减去右对齐组合框所需的空间。:
public class WidthConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return Math.Max(System.Convert.ToDouble(value) - System.Convert.ToDouble(parameter), 0.0);
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
然后,我在工具栏中添加了一个标签控件,放置在您需要右对齐的组合框的左侧。将标签的 Width 绑定到工具栏的 ActualWidth 并应用 WidthConverter:
<Label Width="{Binding Converter={StaticResource WidthConverter}, ElementName=toolBar1, Path=ActualWidth, ConverterParameter=50}" />
您需要根据您的特定需求调整 ConverterParameter,直到获得所需的“右对齐”。数字越大,组合框的空间越大,数字越小,空间越小。
使用此解决方案,只要您的工具栏调整大小,标签就会自动调整大小,使您的组合框看起来正确对齐。
与向工具栏添加网格相比,此解决方案有两个很大的好处。首先是如果你需要使用工具栏上的按钮,你不会失去工具栏按钮的样式。第二个是如果通过调整窗口大小来减少工具栏长度,溢出将按预期工作。单个按钮将根据需要进入溢出。如果将按钮放入网格中,则网格将放入溢出中,并带有所有按钮。
正在使用的 XAML:
<ToolBarPanel>
<ToolBar Name="toolBar1">
<Button>
<Image Source="save.png"/>
</Button>
<Label Width="{Binding Converter={StaticResource Converters.WidthConverter},
ElementName=toolBar1,
Path=ActualWidth,
ConverterParameter=231}" HorizontalAlignment="Stretch" ToolBar.OverflowMode="Never"/>
<Button>
<Image Source="open.png"/>
</Button>
</ToolBar>
如果您希望始终保留工具栏上的最后一个按钮,例如您希望始终可见的帮助按钮,请将 ToolBar.OverflowMode="Never" 属性添加到其元素。