Entwickler-Ecke

WPF / Silverlight - Button Corner Radius im Code verändern


MK2291 - Mi 28.01.15 13:11
Titel: Button Corner Radius im Code verändern
Hallo Leute,

habe wieder ein kleines Problem und zwar. Ich erstelle einen Button:

C#-Quelltext
1:
2:
Button button = new Button();
grid.Children.Add(button);


Jetzt würde ich aber gerne wissen wie ich es schaffe den Corner Radius hier im Code zu ändern.

Danke


Th69 - Mi 28.01.15 13:47

Nur ein Border-Control hat direkt die Eigenschaft CornerRadius [https://msdn.microsoft.com/de-de/library/system.windows.controls.border.cornerradius%28v=vs.110%29.aspx].
Du kannst dann deinen Button dort als Unterelement hinzufügen, s. z.B. button with rounded corners [https://social.msdn.microsoft.com/Forums/vstudio/en-US/511f354d-8cc6-4149-8b3a-e7084eb71db7/button-with-rounded-corners?forum=wpf]

Du kannst aber auch für einen Button ein eigenes ControlTemplate erzeugen, s. z.B.
Set CornerRadius on button template [http://stackoverflow.com/questions/17681022/set-cornerradius-on-button-template]
how to create/make rounded corner buttons in WPF? [http://stackoverflow.com/questions/6745663/how-to-create-make-rounded-corner-buttons-in-wpf]
RoundedButton Button Style (WPF) [http://geekswithblogs.net/cskardon/archive/2008/06/20/roundedbutton-button-style-wpf.aspx]

Für den Code-Behind mußt du dann halt die XAML-Syntax nach C# übersetzen. Aber warum benutzt du denn kein XAML?


MK2291 - Mi 28.01.15 15:01

Ja nur leider weiß ich nicht wie ich das machen soll. Buttons die ich im wpf erzeuge und dann Corner Radius verändern soll ist kein Problem. Aber verstehe es nicht wie ich es bei einem Button mach der per code erzeugt wird und erst beim Programmstart in meinem Grid mit einer for schleife erzeugt wird. Und wenn ich das bei meinem Grid änder wird es ja trotzdem überschrieben und ich hab keine Runden ecken.

Aber trotzdem danke


Th69 - Mi 28.01.15 16:53

Dann probiere mal:

C#-Quelltext
1:
2:
3:
4:
5:
6:
Border border = new Border();
border.CornerRadius = new CornerRadius(15);
grid.Children.Add(border);

Button button = new Button();
border.Children.Add(button);


Trotzdem noch mal die Frage, warum du das Erzeugen von Controls per Code-Behind machst und nicht per XAML (ControlTemplate und MVVM)?


MK2291 - Mi 28.01.15 18:19

Ja das Problem bei dem ganzen ist einfach mein Chef:) klappt leider nicht da er mir sagt border enthält kein Children :)


Th69 - Do 29.01.15 10:59

Ich hoffe, du hast den Fehler im Code selber lösen können... ;-)

Falls nicht, dann hier die Lösung (laut MSDN Border Klasse [https://msdn.microsoft.com/de-de/library/system.windows.controls.border%28v=vs.110%29.aspx]):

C#-Quelltext
1:
border.Child = button;                    

Border ist von Decorator abgeleitet und hat immer nur genau ein Unterelement.

PS: Selbst ist der Chef :wink: