Мое решение для этого было создать элемент управления меткой с "пружинной" способностью, чтобы он заполнял пустое пространство между кнопками на панели инструментов, таким образом "выравнивая по правому краю" в выпадающем списке панели инструментов (или любом другом элементе управления).для этого нужно «выровнять по правому краю).
Для этого я создал 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>
ЕслиВы хотите всегда держать последнюю кнопку на панели инструментов, скажем кнопку помощи, которую вы всегда хотите видеть, добавьте атрибут ToolBar.OverflowMode = "Never" к его элементу.