我對此的解決方案是創建一個具有「彈簧」類似能力的標籤控件,以便它可以填充工具欄上按鈕之間的空白空白,從而「右對齊」工具欄的組合框(或任何其他需要控制「右對齊)。
要做到這一點,我創建了一個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