Grafisch aufwendige Programme mit VB?

  • Allgemein

Es gibt 25 Antworten in diesem Thema. Der letzte Beitrag () ist von Orion.

    Oh, sorry, hatte mich da ganz böse verguggt.
    @VB1963 Dann stimmt mein Beitrag natürlich nicht, VB.NET und WPF zu mischen ist ja legitim bzw. von "mischen" kann man ja nicht sprechen, da es sich ja so gehört, da VB.NET ja weiterhin die Sprache zum Programmieren ist, wenn man sie wählt. Solange man nat. MVVM nutzt und Daten und UI schön trennt.
    Ich hatte vor das lauter Eifer in Orion's Beitrag mit Windows Forms verwechselt, also dass man Windows Forms und WPF mischt, als ich das gelesen hatte, da eig. das eher öfters als Frage/Diskussion auftaucht. Das wäre natürlich böse. VB.NET in WPF zu nutzen ist ja völlig in Ordnung, das muss man ja dann sogar.

    @Orion Ich muss mich deshalb nochmal schnell verbessern, sorry, das muss man ja so machen.
    @slice Nein, ich sprach von der Mischung von Windows Forms und WPF, was der TE aber gar nicht angesprochen hatte. ^^

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!:

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Trade“ ()

    Okay, Okay dann hab ich jetzt alles verstanden. Mein Unwissen bei WPF ist halt wirklich im Maximum weil ich damit bisher noch überhaupt nichts am Hut hatte und gerade mal einige Diskussionen hier gelesen habe und Bilder auf google gesehen hab mehr nicht. Davor musste ich nur klotzige hässliche Formularforms und solche Sachen für KV Kunden die schnell was tippen wollen und dann Drucken erstellen. Was ja so optimal und schnell in reinem VB.NET geschrieben ist.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)

    Bei WPF musst du halt XAML lernen. Wenn du schon mal mit HTML oder XML gearbeitet hast, ist das zumindest von der Syntax her kein großes Problem und den Rest bekommt man eigentlich auch schnell gebacken, wenn man etwas Willenskraft und kein Problem mit Neuerungen hat ;)
    Ich habe den Button mal nachgemacht, war wirklich nicht viel Arbeit:
    Spoiler anzeigen
    XAML

    XML-Quellcode

    1. <Style TargetType="Button" x:Key="CoolButtonStyle">
    2. <Setter Property="OverridesDefaultStyle" Value="True"/>
    3. <Setter Property="Foreground" Value="LightGray"/>
    4. <Setter Property="FontSize" Value="14"/>
    5. <Setter Property="FontWeight" Value="Bold"/>
    6. <Setter Property="Height" Value="65"/>
    7. <Setter Property="Template">
    8. <Setter.Value>
    9. <ControlTemplate TargetType="Button">
    10. <Grid>
    11. <my:ClippingBorder BorderBrush="Black" BorderThickness="2" CornerRadius="22" Margin="10">
    12. <Border.Effect>
    13. <DropShadowEffect ShadowDepth="0" Color="White" Opacity="0.5" BlurRadius="15" x:Name="GlowEffect"/>
    14. </Border.Effect>
    15. <Grid>
    16. <Grid.Background>
    17. <LinearGradientBrush EndPoint="1,1" StartPoint="1,0">
    18. <GradientStop Color="Black" Offset="1"></GradientStop>
    19. <GradientStop Color="#FF47515B" Offset="0" x:Name="Basecolor"></GradientStop>
    20. </LinearGradientBrush>
    21. </Grid.Background>
    22. <Border BorderThickness="2" CornerRadius="22">
    23. <Border.BorderBrush>
    24. <LinearGradientBrush StartPoint="0,0" EndPoint="1,0">
    25. <GradientStop Color="#FF037E9E" Offset="0.2"></GradientStop>
    26. <GradientStop Color="#FF09ABD4" Offset="0.3"></GradientStop>
    27. <GradientStop Color="#FF037E9E" Offset="0.4"></GradientStop>
    28. <GradientStop Color="#FF037E9E" Offset="0.6"></GradientStop>
    29. <GradientStop Color="#FF09ABD4" Offset="0.7"></GradientStop>
    30. <GradientStop Color="#FF037E9E" Offset="0.8"></GradientStop>
    31. </LinearGradientBrush>
    32. </Border.BorderBrush>
    33. </Border>
    34. <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center"/>
    35. </Grid>
    36. </my:ClippingBorder>
    37. </Grid>
    38. <ControlTemplate.Triggers>
    39. <Trigger Property="IsMouseOver" Value="True">
    40. <Trigger.EnterActions>
    41. <BeginStoryboard>
    42. <Storyboard>
    43. <DoubleAnimation Duration="0:0:0.4" To="0.8" Storyboard.TargetName="GlowEffect" Storyboard.TargetProperty="Opacity"/>
    44. </Storyboard>
    45. </BeginStoryboard>
    46. </Trigger.EnterActions>
    47. <Trigger.ExitActions>
    48. <BeginStoryboard>
    49. <Storyboard>
    50. <DoubleAnimation Duration="0:0:0.4" To="0.5" Storyboard.TargetName="GlowEffect" Storyboard.TargetProperty="Opacity"/>
    51. </Storyboard>
    52. </BeginStoryboard>
    53. </Trigger.ExitActions>
    54. </Trigger>
    55. <Trigger Property="IsPressed" Value="True">
    56. <Trigger.EnterActions>
    57. <BeginStoryboard>
    58. <Storyboard>
    59. <ColorAnimation Duration="0:0:0.2" To="Black" Storyboard.TargetName="Basecolor" Storyboard.TargetProperty="Color"/>
    60. </Storyboard>
    61. </BeginStoryboard>
    62. </Trigger.EnterActions>
    63. <Trigger.ExitActions>
    64. <BeginStoryboard>
    65. <Storyboard>
    66. <ColorAnimation Duration="0:0:0.2" To="#FF47515B" Storyboard.TargetName="Basecolor" Storyboard.TargetProperty="Color"/>
    67. </Storyboard>
    68. </BeginStoryboard>
    69. </Trigger.ExitActions>
    70. </Trigger>
    71. </ControlTemplate.Triggers>
    72. </ControlTemplate>
    73. </Setter.Value>
    74. </Setter>
    75. </Style>

    C#

    C#-Quellcode

    1. public class ClippingBorder : Border
    2. {
    3. protected override void OnRender(DrawingContext dc)
    4. {
    5. OnApplyChildClip();
    6. base.OnRender(dc);
    7. }
    8. public override UIElement Child
    9. {
    10. get
    11. {
    12. return base.Child;
    13. }
    14. set
    15. {
    16. if (this.Child == value) return;
    17. if (this.Child != null)
    18. this.Child.SetValue(UIElement.ClipProperty, _oldClip);
    19. _oldClip = value != null ? value.ReadLocalValue(UIElement.ClipProperty) : null;
    20. base.Child = value;
    21. }
    22. }
    23. protected virtual void OnApplyChildClip()
    24. {
    25. UIElement child = this.Child;
    26. if (child != null)
    27. {
    28. _clipRect.RadiusX = _clipRect.RadiusY = Math.Max(0.0, this.CornerRadius.TopLeft - (this.BorderThickness.Left * 0.5));
    29. _clipRect.Rect = new Rect(Child.RenderSize);
    30. child.Clip = _clipRect;
    31. }
    32. }
    33. private readonly RectangleGeometry _clipRect = new RectangleGeometry();
    34. private object _oldClip;
    35. }

    <oder>

    Visual Basic

    VB.NET-Quellcode

    1. ​Public Class ClippingBorder
    2. Inherits Border
    3. Protected Overrides Sub OnRender(dc As DrawingContext)
    4. OnApplyChildClip()
    5. MyBase.OnRender(dc)
    6. End Sub
    7. Public Overrides Property Child() As UIElement
    8. Get
    9. Return MyBase.Child
    10. End Get
    11. Set(value As UIElement)
    12. If Me.Child Is value Then
    13. Return
    14. End If
    15. If Me.Child IsNot Nothing Then
    16. Me.Child.SetValue(UIElement.ClipProperty, _oldClip)
    17. End If
    18. _oldClip = If(value IsNot Nothing, value.ReadLocalValue(UIElement.ClipProperty), Nothing)
    19. MyBase.Child = value
    20. End Set
    21. End Property
    22. Protected Overridable Sub OnApplyChildClip()
    23. Dim child__1 As UIElement = Me.Child
    24. If child__1 IsNot Nothing Then
    25. _clipRect.RadiusX = InlineAssignHelper(_clipRect.RadiusY, Math.Max(0.0, Me.CornerRadius.TopLeft - (Me.BorderThickness.Left * 0.5)))
    26. _clipRect.Rect = New Rect(Child.RenderSize)
    27. child__1.Clip = _clipRect
    28. End If
    29. End Sub
    30. Private ReadOnly _clipRect As New RectangleGeometry()
    31. Private _oldClip As Object
    32. Private Shared Function InlineAssignHelper(Of T)(ByRef target As T, value As T) As T
    33. target = value
    34. Return value
    35. End Function
    36. End Class



    So sieht der Button dann aus (Hover- und Pressed Animation sind schon dabei):


    Nur um dir mal zu zeigen, wie einfach es ist, sowas in XAML zu gestallten, wenn man es einmal kann (Als Ansporn)
    Mfg
    Vincent

    Okay, Ich danke euch für die Hilfe und Beratung. Also ich hab schon einmal mit XML irgendwelche Layout Sachen machen müssen in einem Web Projekt, von dem her wärs wohl nicht schlecht wenn ich hier was dazu lern mit diesem Projekt.
    Metal-Schweiz wurde nun offiziell veröffentlich nach all den Jahren :)