Установка Граничных Свойств в коде

Вот как я этого добиваюсь

edit_login_emailOrPhone.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View v, boolean hasFocus) {
            if(hasFocus)
            {
                textInputLayout_login_emailOrPhone.setTypeface(APSApplication.getInstance().getFonts().getTypefaceSemiBold());
            }else
            {
                textInputLayout_login_emailOrPhone.setTypeface(APSApplication.getInstance().getFonts().getTypefaceRegular());
            }
        }
    });
73
задан H.B. 17 January 2012 в 00:16
поделиться

4 ответа

Проблема в том, что Margin является свойством, а его тип ( Thickness ) является типом значения. Это означает, что при доступе к свойству вы получаете копию значения обратно.

Даже если вы можете изменить значение Thickness.Left ] для определенного значения (grr ... изменяемые типы значений не должны существовать), это не изменит поля.

Вместо этого вам нужно установить для свойства Margin новое значение. Например (по совпадению, тот же код, что написал Марк):

Thickness margin = MyControl.Margin;
margin.Left = 10;
MyControl.Margin = margin;

В качестве примечания к дизайну библиотеки я бы очень предпочел, чтобы Толщина была неизменной, но с методами, которые возвращали новое значение, которое было копия оригинала, но с замененной частью. Тогда вы могли бы написать:

MyControl.Margin = MyControl.Margin.WithLeft(10);

Не беспокойтесь о странном поведении изменяемых типов значений, красиво и читабельно, все одно выражение ...

Я бы очень предпочел, чтобы Толщина была неизменной, но с методами, возвращающими новое значение, которое было копией оригинала, но с одной замененной частью. Тогда вы могли бы написать:

MyControl.Margin = MyControl.Margin.WithLeft(10);

Не беспокойтесь о странном поведении изменяемых типов значений, красиво и читабельно, все одно выражение ...

Я бы очень предпочел, чтобы Толщина была неизменной, но с методами, возвращающими новое значение, которое было копией оригинала, но с одной замененной частью. Тогда вы могли бы написать:

MyControl.Margin = MyControl.Margin.WithLeft(10);

Не беспокойтесь о странном поведении изменяемых типов значений, красиво и читабельно, все одно выражение ...

124
ответ дан 24 November 2019 в 12:10
поделиться

Свойство Margin возвращает структуру Толщина , из которых Left является свойством. Оператор копирует значение структуры из свойства Margin и устанавливает значение свойства Left на копии. Вы получаете сообщение об ошибке, потому что установленное вами значение не будет сохранено обратно в свойство Margin .

(Более ранние версии C # просто позволяли вам делать это без жалоб, вызывая много вопросов в группах новостей и форумы о том, почему подобное утверждение вообще не имело эффекта ...)

Чтобы установить свойство, вам нужно получить структуру Толщина из свойства Margin , установите значение и сохранить его обратно:

Thickness m = MyControl.Margin;
m.Left = 10;
MyControl.Margin = m;

Если вы собираетесь установить все поля, просто создайте структуру Толщина и установите их все сразу:

MyControl.Margin = new Thickness(10, 10, 10, 10);
34
ответ дан 24 November 2019 в 12:10
поделиться

Можно предположить, что (а мой WPF сейчас немного заржавел), что Margin принимает объект и не может быть изменен напрямую.

например

MyControl.Margin = new Margin(10,0,0,0);
4
ответ дан 24 November 2019 в 12:10
поделиться

Margin возвращает структуру, что означает, что вы редактируете копию . Вам понадобится что-то вроде:

var margin = MyControl.Margin;
margin.Left = 10;
MyControl.Margin = margin;
13
ответ дан 24 November 2019 в 12:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: