programing

코드에서 여백 속성 설정

iphone6s 2023. 5. 17. 22:36
반응형

코드에서 여백 속성 설정

MyControl.Margin.Left = 10;

오류:

'System'의 반환 값을 수정할 수 없습니다.창문들.프레임워크 요소.변수가 아니기 때문에 '마진'이 발생합니다.

문제는 속성이고 해당 유형()Thickness이 값 유형이라는 것입니다.즉, 속성에 액세스하면 값의 복사본을 다시 받게 됩니다.

특정 값에 대한 속성 값을 변경할 수 있더라도(grr...변수 값 유형은 존재하면 안 됩니다.), 마진은 변경되지 않습니다.

대신 다음을 설정해야 합니다.Margin새로운 가치에 대한 재산.예를 들어, (우연히 마크가 쓴 것과 같은 코드):

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

도서관 디자인을 위한 노트로서, 만약에Thickness변경할 수 없지만 원본의 복사본이지만 한 부분이 교체된 새로운 값을 반환하는 메서드를 사용합니다.그런 다음 다음과 같이 쓸 수 있습니다.

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

변화무쌍한 가치 유형의 이상한 행동에 대해 걱정하지 않고, 멋지고 읽을 수 있으며, 모든 표현이 하나입니다.

Margin속성이 반환합니다.Thickness구조, 그것의.Left속성입니다.문이 하는 일은 구조 값을 복사하는 것입니다.Margin속성 및 설정Left속성 값을 입력합니다.설정한 값이 다시 저장되지 않으므로 오류가 발생합니다.Margin소유물.

(이전 버전의 C#에서는 아무런 불평 없이 이러한 작업을 수행할 수 있으므로 뉴스 그룹 및 포럼에서 이러한 진술이 전혀 효과가 없는 이유에 대해 많은 질문을 던집니다.)

속성을 설정하려면 필요합니다.Thickness의 구조.Margin속성, 값을 설정하고 다시 저장합니다.

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

모든 여백을 설정하려면 다음을 작성합니다.Thickness한 번에 구성 및 설정:

MyControl.Margin = new Thickness(10, 10, 10, 10);

Margin구조체를 반환하는 중입니다. 즉, 사본을 편집하고 있습니다.다음과 같은 것이 필요합니다.

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

이것을 간단히 사용할 수 있습니다.

MyControl.Margin = new System.Windows.Thickness(10, 0, 5, 0);

Margin이 객체를 가져가서 직접 변경할 수 없는 것으로 추측할 수 있습니다(그리고 현재 제 WPF는 약간 녹슬었습니다).

MyControl.Margin = new Margin(10,0,0,0);

사용하기Thickness프로젝트를 생성/변경해야 합니다..NET framework플랫폼 버전을 4.5로. 왜냐하면 이 방법은 버전 4.5에서만 사용할 수 있기 때문입니다. (또한 PresentationFramework.dll을 다운로드하고 이 dll에 대한 참조를 제공할 수 있습니다.).NET framework버전을 4.5로 변경합니다.)

그러나 이 간단한 작업을 수행하려면 다음 코드를 사용할 수 있습니다.

MyControl.Margin = new Padding(int left, int top, int right, int bottom);

또한.

MyControl.Margin = new Padding(int all);

이는 간단하며 프로젝트를 변경할 필요가 없습니다.

상황에 따라 여기서 패딩 속성을 사용해 볼 수도 있습니다...

MyControl.Margin=new Padding(0,0,0,0);

여백 = 새 두께(0, 0, 0, 0);

무엇을 요구하는지는 다소 불분명하지만 상황을 편안하게 만들기 위해 자신의 Control을 상속하고 Marc가 제안하는 코드로 속성을 추가할 수 있습니다.

class MyImage : Image {
    private Thickness thickness;
    public double MarginLeft {
        get { return Margin.Left; }
        set { thickness = Margin; thickness.Left = value; Margin = thickness; }
    }
}

그러면 클라이언트 코드에 그냥 쓸 수 있습니다.

MyImage img = new MyImage();
img.MarginLeft = 10;
MessageBox.Show(img.Margin.Left.ToString()); // or img.MarginLeft

언급URL : https://stackoverflow.com/questions/1003772/setting-margin-properties-in-code

반응형