Мое решение состояло в том, чтобы создать элемент управления меткой с «пружинной» способностью, чтобы он заполнял пустое пространство между кнопками на панели инструментов, таким образом «выравнивая по правому краю» поле со списком панели инструментов (или любой другой элемент управления, который требует » по правому краю).
Для этого я создал 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();
}
}
Затем я добавил на панель инструментов элемент управления меткой, расположенный слева от поля со списком, которое необходимо выровнять по правому краю. Свяжите ширину метки с 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>
If you desire to always keep the last button on the toolbar, say a help button that you always want visible, add the attribute ToolBar.OverflowMode="Never" to its element.
person
Nathan Dace
schedule
15.05.2011