Erste Versuche in WPF

  • WPF

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Nofear23m.

    Erste Versuche in WPF

    Moin!

    ich muss mich jetzt mit WPF etwas mehr auseinander setzen. So ganz verstanden habe ich das noch nicht. Bei manchen Versuchen sind dann immer diese Art Tab entstanden. Im Anschluss mein erster Dialog.

    Mein aktuelles Problem ist, dass ich den Dialog unten rechts an dem Grid anfasse und wenn ich dann den Dialog skalieren will verschwinden einige Controlls und irgendwie habe ich nur so eine innerliche Fläche am Mauszeiger.

    Kann mir einer weiterhelfen?

    Gruß Jan

    VB.NET-Quellcode

    1. <Window x:Class="DLG_Meldebogen"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    6. mc:Ignorable="d" Title="EBL Meldebogen" ResizeMode="NoResize" Height="434.651" Width="703.969">
    7. <Grid Margin="0,0,72,40">
    8. <Grid.ColumnDefinitions>
    9. <ColumnDefinition Width="147*"/>
    10. <ColumnDefinition Width="17*"/>
    11. <ColumnDefinition Width="47*"/>
    12. </Grid.ColumnDefinitions>
    13. <Label x:Name="lb_Info" Content="Datum der Anfrage" HorizontalAlignment="Left" Height="30" Margin="19,10,0,0" VerticalAlignment="Top" Width="138" RenderTransformOrigin="0.526,1.1"/>
    14. <TextBox x:Name="tb_Message" HorizontalAlignment="Left" Height="25" Margin="148,15,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="142" />
    15. <Button x:Name="bt_Cancel" Content="Abbruch" HorizontalAlignment="Left" Height="30" Margin="25,76,0,0" VerticalAlignment="Top" Width="96" ToolTip="Beendet diese Funktion" IsCancel="True" IsDefault="True"/>
    16. <Button x:Name="bt_Help" Content="Hilfe" HorizontalAlignment="Left" Height="30" Margin="265,75,0,0" VerticalAlignment="Top" Width="88" ToolTip="Hilfestellung"/>
    17. <Button x:Name="bt_Create" Content="Anlegen" Height="30" Margin="148,75,189,0" VerticalAlignment="Top" ToolTip="erstellt und versendet eMail"/>
    18. <Label x:Name="lb_DSGVO" Content="Label" HorizontalAlignment="Left" Height="30" Margin="19,45,0,0" VerticalAlignment="Top" Width="271"/>
    19. </Grid>
    20. </Window>
    Hallo Jan

    Freut mich, vieleicht kommt ja wieder jemand auf den Geschmack. Der Anfang ist schwer, mach sich aber bezahlt die WPF zu lernen finde ich.

    Das liegt daran das du hier überall Margins drinnen hast. Ich empfehle immer NICHT den Designer zu nutzen da man hier ann die Margins immer per Hand herausnehmen muss.
    Ist man erstmal drinnen kommt man dank Intellisens auch schneller voran als mit dem Designer.

    Sehe dir mal die ersten Kaptiel meiner Tutorialreihe (siehe Signatur) an, dort gehe ich als erstes mal auf das Layouting ein. Das wäre sehr wichtig für dich da du dir hier sehr viel ärger und probiererei sparen kannst.

    So würde ich das Fenster vermutlich designen:

    XML-Quellcode

    1. <Window x:Class="MainWindow"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    6. xmlns:local="clr-namespace:WpfApp3"
    7. mc:Ignorable="d" Title="EBL Meldebogen" MinWidth="210" MinHeight="100" SizeToContent="WidthAndHeight" Height="434.651" Width="703.969">
    8. <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
    9. <DockPanel Margin="5">
    10. <DockPanel.Resources>
    11. <Style TargetType="{x:Type Button}">
    12. <Setter Property="Margin" Value="3"/>
    13. <Setter Property="Padding" Value="5"/>
    14. </Style>
    15. </DockPanel.Resources>
    16. <WrapPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="10">
    17. <Label x:Name="lb_Info" Target="{Binding ElementName=tb_Message}" Content="_Datum der Anfrage:"/>
    18. <TextBox x:Name="tb_Message" Width="138" VerticalAlignment="Center"/>
    19. </WrapPanel>
    20. <WrapPanel Orientation="Horizontal" DockPanel.Dock="Top">
    21. <Label x:Name="lb_DSGVO" Content="Label" Width="271"/>
    22. </WrapPanel>
    23. <WrapPanel Orientation="Horizontal" VerticalAlignment="Bottom" DockPanel.Dock="Bottom">
    24. <Button x:Name="bt_Cancel" Content="Abbruch" Width="96" ToolTip="Beendet diese Funktion" IsCancel="True" IsDefault="True"/>
    25. <Button x:Name="bt_Help" Content="Hilfe" ToolTip="Hilfestellung"/>
    26. <Button x:Name="bt_Create" Content="Anlegen" ToolTip="erstellt und versendet eMail"/>
    27. </WrapPanel>
    28. </DockPanel>
    29. </ScrollViewer>
    30. </Window>


    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

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

    Moin!
    danke erst einmal - werde am WE mal bei YouTube reinschauen.

    Habe nun noch etwas umgestellt und zwei kurze Fragen um weiterzumachen:
    1.) wie kann ich hinter dem Datum der Anfrage umbrechen damit der Kalender darunter steht?
    2.) da ist noch so ein blauer Rand den ich nicht weg bekomme...



    Ich lege noch einen nach. Habe einen Kalender eingebaut und wenn ich auf den aktuellen Tag springen will mit einem anderen Button, dann hatte ich darfür folgendes rausgefunden:

    VB.NET-Quellcode

    1. cal_Anfrage.SelectedDate = Now
    2. cal_Anfrage.DisplayDate = Now


    Durchläuft der Code diese Stelle das erste mal, dann passiert nichts! Erst beim zweiten mal wird der aktuelle Tag auch visualisiert.

    Liege ich falsch?

    Gruß Jan

    Hier die aktuelle Version:

    VB.NET-Quellcode

    1. <Window x:Class="DLG_CreateKampfmittelAnf"
    2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    4. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    5. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    6. mc:Ignorable="d" Title="EBL Kampfmittelanfrage anlegen" ResizeMode="NoResize" Height="319.651" Width="443.969">
    7. <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" Margin="0,0,-38,0">
    8. <DockPanel Margin="5">
    9. <DockPanel.Resources>
    10. <Style TargetType="{x:Type Button}">
    11. <Setter Property="Margin" Value="3"/>
    12. <Setter Property="Padding" Value="5"/>
    13. </Style>
    14. </DockPanel.Resources>
    15. <WrapPanel Orientation="Horizontal" DockPanel.Dock="Top" Height="187">
    16. <Label x:Name="lb_Datum" Target="{Binding ElementName=tb_Message}" Content="_Datum der Anfrage:"/>
    17. <Calendar Height="176" Width="266"/>
    18. </WrapPanel>
    19. <WrapPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="10">
    20. <Label x:Name="lb_Bezeichnung" Target="{Binding ElementName=tb_Message}" Content="Anfrage-Bezeichnung"/>
    21. </WrapPanel>
    22. <WrapPanel Orientation="Horizontal" VerticalAlignment="Bottom" DockPanel.Dock="Bottom" Height="48">
    23. <Button x:Name="bt_Cancel" Content="Abbruch" Width="96" ToolTip="Beendet diese Funktion" IsCancel="True" IsDefault="True"/>
    24. <Button x:Name="bt_Help" Content="Hilfe" Width="96" ToolTip="Hilfestellung"/>
    25. <Button x:Name="bt_Create" Content="Anlegen" Width="96" ToolTip="Anfrage anlegen"/>
    26. </WrapPanel>
    27. </DockPanel>
    28. </ScrollViewer>
    29. </Window>

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

    Hallo

    Um den blauen Balken musst du dich in diesem Fall nicht wirklich kümmern, der wird nur zur Designtime angezeigt weil es für das Control mehrere Ansichten gibt.

    Was dein anderes Problem betrifft kann ich nur sagen. Verwende Binding. Die WPF lebt von Binding. Das ist genau das was man eben lernen muss wenn man in die Welt der WPF kommt.
    In der WPF spricht man Controls nicht an ala Me.Controlname.Property = value .
    Alles geschiet über Binding. Haste aber eh alles in meinem Tutorial. Ansonsten frag ruig, kein problem.

    Hier mal ein Beispiel für dein aktuelles problem.

    Folgender XAML:

    XML-Quellcode

    1. <ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto" Margin="0,0,-38,0">
    2. <DockPanel Margin="5">
    3. <DockPanel.Resources>
    4. <Style TargetType="{x:Type Button}">
    5. <Setter Property="Margin" Value="3"/>
    6. <Setter Property="Padding" Value="5"/>
    7. </Style>
    8. </DockPanel.Resources>
    9. <WrapPanel Orientation="Horizontal" DockPanel.Dock="Top" Height="187">
    10. <Label x:Name="lb_Datum" Target="{Binding ElementName=tb_Message}" Content="_Datum der Anfrage:"/>
    11. <Calendar SelectedDate="{Binding CurrentDate}"/>
    12. </WrapPanel>
    13. <WrapPanel Orientation="Horizontal" DockPanel.Dock="Top" Margin="10">
    14. <Label x:Name="lb_Bezeichnung" Target="{Binding ElementName=tb_Message}" Content="Anfrage-Bezeichnung"/>
    15. </WrapPanel>
    16. <WrapPanel Orientation="Horizontal" VerticalAlignment="Bottom" DockPanel.Dock="Bottom" Height="48">
    17. <Button x:Name="bt_Cancel" Content="Abbruch" Width="96" ToolTip="Beendet diese Funktion" IsCancel="True" IsDefault="True"/>
    18. <Button x:Name="bt_Help" Content="Hilfe" Width="96" ToolTip="Hilfestellung"/>
    19. <Button x:Name="bt_Create" Content="Anlegen" Width="96" ToolTip="Anfrage anlegen"/>
    20. <Button Content="Datum -" Width="96" ToolTip="Anfrage anlegen" Click="DateMinus"/>
    21. <Button Content="Datum +" Width="96" ToolTip="Anfrage anlegen" Click="DatePlus"/>
    22. </WrapPanel>
    23. </DockPanel>
    24. </ScrollViewer>


    Und folgende CodeBehind:

    VB.NET-Quellcode

    1. Imports System.ComponentModel
    2. Class MainWindow
    3. Implements INotifyPropertyChanged
    4. Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
    5. DataContext = Me
    6. CurrentDate = Date.Now
    7. End Sub
    8. Private _currentDate As Date
    9. Public Property CurrentDate() As Date
    10. Get
    11. Return _currentDate
    12. End Get
    13. Set(ByVal value As Date)
    14. _currentDate = value
    15. RaiseEvent PropertyChanged(Me, New PropertyChangedEventArgs(NameOf(CurrentDate)))
    16. End Set
    17. End Property
    18. Private Sub DateMinus(sender As Object, e As RoutedEventArgs)
    19. CurrentDate = DateAdd(DateInterval.Day, -1, CurrentDate)
    20. End Sub
    21. Private Sub DatePlus(sender As Object, e As RoutedEventArgs)
    22. CurrentDate = DateAdd(DateInterval.Day, 1, CurrentDate)
    23. End Sub
    24. Public Event PropertyChanged As PropertyChangedEventHandler Implements INotifyPropertyChanged.PropertyChanged
    25. End Class


    Es wird INotifyPropertyChanged implementiert dasmit die View änderungen mitbekommt, genaue erklärung findest du in den ersten Kapiteln meiner Tutorialreihe.
    Ein Property CurrentDate wird an das CalendarControl gebunden. siehe im XAML: SelectedDate="{Binding CurrentDate}"
    Wird das Property verändert, ändert sich der Wert im Control auch. aber auch umgekehrt. Ändert sich der Wert durch klicken in das Control wird dieser in das Property zurückgeschrieben. Kannst du testen indem du einen Haltepunkt im Setter des Properties setzt.

    EDIT: Wegen dem Umbrechen. Mach mal die Orientation des Wrappanel indem sich das CaledarControl befindet auf "Vertical". ;)

    Schöne Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##

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

    Hallo @jan99

    Hat das deine Frage beantwortet oder benötigst du noch weitere Unterstützung. das weis leider niemand wenn du dich nicht mehr zurückmeldest.

    Grüße
    Sascha
    If _work = worktype.hard Then Me.Drink(Coffee)
    Seht euch auch meine Tutorialreihe <WPF Lernen/> an oder abonniert meinen YouTube Kanal.

    ## Bitte markiere einen Thread als "Erledigt" wenn deine Frage beantwortet wurde. ##