Mi solución a esto era crear un control de etiqueta con una habilidad de "resorte", para llenar el vacío vacío entre los botones de la barra de herramientas, alineando "correctamente" el cuadro combinado de la barra de herramientas (o cualquier otro control que necesita "alineado a la derecha).
para hacer esto, he creado un WidthConverter, que llevaría el ancho real del control de barra de herramientas y luego restar el espacio necesario necesario para alinear a la derecha del cuadro combinado .:
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();
}
}
Luego, agregué un control de etiqueta a la barra de herramientas, que se encuentra a la izquierda del cuadro combinado que necesita alineado a la derecha. Ancho de etiqueta para ActualWidth de la barra de herramientas y aplicar la WidthConverter:
<Label Width="{Binding Converter={StaticResource WidthConverter}, ElementName=toolBar1, Path=ActualWidth, ConverterParameter=50}" />
Usted tendrá que ajustar el ConverterParameter a sus necesidades específicas hasta obtener el deseado "alinear a la derecha". Un número más alto proporciona más espacio para el cuadro combinado, mientras que un número inferior proporciona menos espacio.
Al usar esta solución, la etiqueta cambiará de tamaño automáticamente cada vez que su barra de herramientas cambie de tamaño, haciendo que parezca que ha alineado su cuadro combinado.
Esta solución ofrece dos grandes ventajas en comparación con agregar una cuadrícula a la barra de herramientas. La primera es que si necesita usar botones en la barra de herramientas, no perderá el estilo del botón de la barra de herramientas. El segundo es que el desbordamiento funcionará como se espera si la longitud de la barra de herramientas se reduce mediante el cambio de tamaño de la ventana. Los botones individuales irán al desbordamiento según sea necesario. Si los botones se colocan en una cuadrícula, la cuadrícula se coloca en el desbordamiento y se toman todos los botones.
XAML de ella en uso:
<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>
Si desea mantener siempre el último botón de la barra de herramientas, por ejemplo un botón de ayuda que siempre quiere visible, añadir la barra Atributo . OverflowMode = "Nunca" a su elemento.
En realidad, me parece una solución brillante (y muy clara). He estado plagado por este problema durante tanto tiempo. ¡Gracias! – pongba
Esta es realmente una idea brillante. ¡Gracias! – newman
Bonita, bonita, bastante buena. – SmartK8