質問

MyControl.Margin.Left = 10;

エラー:

  

変数ではないため、 'System.Windows.FrameworkElement.Margin'の戻り値を変更できません

役に立ちましたか?

解決

問題は、 Margin はプロパティであり、そのタイプ( < code> Thickness )は値型です。つまり、プロパティにアクセスすると、値のコピーが返されます。

変更できますが特定の値のrel = "noreferrer"> Thickness.Left プロパティ(grr ...可変値タイプは存在しないはずです)、マージンは変更されません。

>

代わりに、 Margin プロパティを新しい値に設定する必要があります。例えば(偶然にもMarcが書いたのと同じコード):

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

ライブラリ設計のメモとして、 Thickness が不変であるが、元のコピーであるが一部が置換された新しい値を返すメソッドを使用する場合、私はそれを非常に好むでしょう。その後、次のように書くことができます:

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

変更可能な値型の奇妙な動作については心配しません。見やすく読みやすい、すべて1つの式...

他のヒント

Margin プロパティは、 Left がプロパティである Thickness 構造を返します。このステートメントは、 Margin プロパティから構造値をコピーし、そのコピーに Left プロパティ値を設定します。設定した値は Margin プロパティに保存されないため、エラーが発生します。

(以前のバージョンのC#では、文句を言わずにそれを行うことができたため、ニュースグループやフォーラムで、そのような声明がまったく効果がなかった理由について多くの質問を引き起こしています...)

プロパティを設定するには、 Margin プロパティから Thickness 構造を取得し、値を設定して保存する必要があります。

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は今少し錆びています)。

e.g

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

Thickness を使用するには、プロジェクトの .NET framework プラットフォームバージョンを4.5に作成/変更する必要があります。このメソッドはバージョン4.5でのみ使用できるためです。 (また、 .NET framework のバージョンを4.5に作成/変更せずに、PresentationFramework.dllをダウンロードしてこのDLLに参照を与えることもできます。)

しかし、これを簡単にしたい場合は、次のコードを使用できます:

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

また

MyControl.Margin = new Padding(int all);

これは簡単で、プロジェクトを変更する必要はありません

状況によっては、ここでpaddingプロパティを使用してみることもできます...

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

Margin = new Thickness(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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top