我对此的解决方案是创建一个具有“弹簧”类似能力的标签控件,以便它可以填充工具栏上按钮之间的空白空白,从而“右对齐”工具栏的组合框(或任何其他需要控制“右对齐)。
要做到这一点,我创建了一个WidthConverter,这将需要工具栏控件的实际宽度,然后减去需要需要的空间右对齐的组合框:
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();
}
}
然后,我在工具栏中添加了一个标签控件,放置在需要右对齐的组合框的左侧。标签的宽度到工具栏的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>
如果你希望一直保持在工具栏上的最后一个按钮,说一个帮助按钮,你总是希望看到,添加属性工具栏。 OverflowMode =“从不”到它的元素。
其实我觉得这是一个非常棒的(非常整洁的)解决方案。这个问题长期以来一直困扰着我。谢谢! – pongba 2010-07-22 07:42:56
这真是一个绝妙的主意。谢谢! – newman 2012-11-11 04:06:49
漂亮,漂亮,很不错。 – SmartK8 2014-08-04 14:33:33