1. ホーム
  2. c#

[解決済み] コードでマージンのプロパティを設定する

2023-06-01 21:33:16

質問

MyControl.Margin.Left = 10;

エラーです。

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

どのように解決するのですか?

問題は Margin はプロパティであり、その型 ( Thickness ) は値型です。つまり、このプロパティにアクセスしたときには コピー を取得することになります。

たとえ、あなたが ができる の値を変更しても Thickness.Left プロパティの値を変更しても、マージンは変更されません。

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

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

ライブラリの設計のためのメモとして、私は、もし Thickness が immutable でありながら、元の値のコピーである新しい値を返すメソッドを備えていたら、非常に良かったと思います。そうすれば、書くことができます。

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

ミュータブルな値型の奇妙な振る舞いを心配する必要はなく、素晴らしく読みやすい、すべて1つの式です...。