Ustawianie właściwości marginesu w kodzie
MyControl.Margin.Left = 10;
Błąd:
Nie można modyfikować wartości zwracanej ' System.Okna./ Align = "left" / Margin' ponieważ nie jest zmienną
9 answers
Problem polega na tym, że Margin
jest nieruchomością, a jej rodzaj (Thickness
) jest typem wartości. Oznacza to, że po uzyskaniu dostępu do właściwości otrzymujesz kopię wartości z powrotem.
Nawet jeśli Możesz zmienić wartość Thickness.Left
właściwość dla określonej wartości (gr... zmienne typy wartości nie powinny istnieć), nie zmieniłoby to marginesu.
Zamiast tego musisz ustawić właściwość Margin
na nową wartość. Na przykład (przypadkowo ten sam kod Co Marc napisał):
Thickness margin = MyControl.Margin;
margin.Left = 10;
MyControl.Margin = margin;
Jako uwaga do projektowania bibliotek, zdecydowanie wolałbym, żeby Thickness
były niezmienne, ale z metodami, które zwracają nową wartość, która jest kopią oryginału, ale z jedną częścią zastąpioną. Wtedy możesz napisać:
MyControl.Margin = MyControl.Margin.WithLeft(10);
Nie martw się dziwnym zachowaniem zmiennych typów wartości, ładne i czytelne, wszystko jedno wyrażenie...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 20:33:40
Właściwość Margin
zwraca strukturę Thickness
, której Left
jest właściwością. Polecenie to kopiuje wartość struktury z właściwości Margin
i ustawia wartość właściwości Left
na kopii. Pojawia się błąd, ponieważ ustawiona wartość nie zostanie zapisana z powrotem do właściwości Margin
.
(wcześniejsze wersje C# pozwoliłyby ci to zrobić bez narzekania, powodując wiele pytań w grupach dyskusyjnych i forach na temat tego, dlaczego takie stwierdzenie nie miało wpływu na wszystkie...)
Aby ustawić właściwość, należy pobrać strukturę Thickness
z właściwości Margin
, ustawić wartość i zapisać ją z powrotem:
Thickness m = MyControl.Margin;
m.Left = 10;
MyControl.Margin = m;
Jeśli chcesz ustawić wszystkie marginesy, po prostu utwórz strukturę Thickness
i ustaw je wszystkie na raz:
MyControl.Margin = new Thickness(10, 10, 10, 10);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 20:32:21
Margin
zwraca strukturę, co oznacza, że edytujesz kopię . Będziesz potrzebował czegoś takiego jak:
var margin = MyControl.Margin;
margin.Left = 10;
MyControl.Margin = margin;
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 20:30:20
Można po prostu użyć tego
MyControl.Margin = new System.Windows.Thickness(10, 0, 5, 0);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-04-22 08:41:59
Można by się domyślić, że (a mój WPF jest teraz trochę zardzewiały) ten margines zajmuje obiekt i nie można go bezpośrednio zmienić.
E. g
MyControl.Margin = new Margin(10,0,0,0);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-06-16 20:29:34
Aby użyć Thickness
Musisz utworzyć/zmienić wersję projektu .NET framework
Na 4.5. ponieważ metoda ta jest dostępna tylko w wersji 4.5. (Również można po prostu pobrać PresentationFramework.dll i dać referense do tej biblioteki dll, bez tworzenia/zmiany wersji .NET framework
Na 4.5.)
Ale jeśli chcesz zrobić to proste, możesz użyć tego kodu:
MyControl.Margin = new Padding(int left, int top, int right, int bottom);
Również
MyControl.Margin = new Padding(int all);
Jest to proste i nie wymaga żadnych zmian w projekcie
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-25 13:27:01
W zależności od sytuacji, możesz również spróbować użyć właściwości padding tutaj...
MyControl.Margin=new Padding(0,0,0,0);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-06 08:20:58
Jest trochę niejasne o co prosisz, ale aby było wygodniej, możesz odziedziczyć własną kontrolę i dodać właściwość z kodem, który sugeruje Marc:
class MyImage : Image {
private Thickness thickness;
public double MarginLeft {
get { return Margin.Left; }
set { thickness = Margin; thickness.Left = value; Margin = thickness; }
}
}
Następnie w kodzie klienta możesz napisać tylko
MyImage img = new MyImage();
img.MarginLeft = 10;
MessageBox.Show(img.Margin.Left.ToString()); // or img.MarginLeft
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-03 09:39:57
Margin = New Thickness(0, 0, 0, 0);
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-07 08:43:24