Как мне вернуть пространство из "Захвата"
У меня есть StatusStrip с одним ToolStripStatusLabel, Spring=true и цвет фона для уведомлений.
Проблема в том, что на правой стороне полосы состояния есть уродливый серый квадрат. Немного поигравшись, я понял, что это размерный захват (у меня было установлено SizingGrip=false, GripStyle=Hidden). Тем не менее, даже когда он скрыт, он все еще поглощает пространство. Я не могу получить какой-либо контент на полосе состояния, чтобы расширить до вправо.
Как бы вы обойти это? Примечание. Я не могу просто установить задний цвет StatusStrip, поскольку метка состояния меняет цвета и имеет некоторые эффекты выцветания.
4 ответа
Свойство StatusStrip.Padding не используется, оно возвращает неправильное значение для Padding.Right, если захват размера отключен. Вы можете исправить это в конструкторе форм, например так:
public Form1() {
InitializeComponent();
statusStrip1.Padding = new Padding(statusStrip1.Padding.Left,
statusStrip1.Padding.Top, statusStrip1.Padding.Left, statusStrip1.Padding.Bottom);
}
Использование свойства Left для указания Right - это исправление. Не пытайтесь отправить эту ошибку в Connect, они не исправят ее.
Посмотрите на эту запись в блоге на MSDN. Вопрос состоял в том, чтобы вручную изменить размер калибровочной ручки, и я думаю, что использование ToolStrip Renderer, как было предложено, может работать и для вас.
Проблема, которую я имею до сих пор, заключается в том, что он удаляет цвет фона на метке состояния в StatusStrip, так что это еще не решение, но это начало.
public MyForm()
{
InitializeComponent();
statusStrip1.Renderer = new MyRenderer();
}
private class MyRenderer : ToolStripProfessionalRenderer
{
protected override void OnRenderStatusStripSizingGrip(ToolStripRenderEventArgs e)
{
// don't draw at all
}
}
У меня была следующая проблема: когда я установил tsslSeparator.Spring = true
Моя правая метка исчезла сразу после того, как tsslSeparator потерял фокус. Проблема появилась при включении калибровки. Когда он был отключен, все работало просто отлично. Решение состояло в том, чтобы установить правое поле для правой метки на значение, отличное от 0.
tsslLogging.Margin = new Padding(0, 3, 2, 2); // this is necessary for right alignment of status bar label
Надеюсь, это кому-нибудь поможет.
Если Microsoft не заинтересована в ее исправлении, похоже, что правильное исправление должно обрабатывать все ориентации и в идеале исправлять все полоски состояния (см. Мой ответ на Get All Children для определения GetAllChildren)
public static StatusStrip FixPadding(this StatusStrip ss) {
if (!ss.SizingGrip) {
var fixpad = ss.Padding;
if (ss.Orientation == Orientation.Horizontal) {
if (ss.RightToLeft == RightToLeft.No)
fixpad.Right = fixpad.Left;
else
fixpad.Left = fixpad.Right;
}
else
fixpad.Bottom = fixpad.Top;
ss.Padding = fixpad;
}
return ss;
}
public static void FixStatusStripPadding(this Form f) {
foreach (var ss in f.GetAllChildren().OfType<StatusStrip>())
ss.FixPadding();
}