UserControl ändert Size wenn es auf MainWindow "gezogen" wird

  • WPF

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

    UserControl ändert Size wenn es auf MainWindow "gezogen" wird

    Ich bin in der WPF-Welt noch ziemlich neu und entsprechend unbeholfen.
    Ich habe eine WPF-Benutzersteuerelementbibliothek angelegt und darin UserControls erstellt. Diesen UserControls habe ich im XAML feste Werte für Width(150) und Height(50) zugewiesen.

    Die UserControl-DLL binde ich in eine WPF-App ein und kann hier auch alles so nutzen wie geplant.
    Wenn ich allerdings das UserControl per Drag&Drop aus der Toolbox auf das MainWindow bringen will, hat es immer den Wert 100, sowohl für Width als auch für Height.

    Ich hätte quasi gerne, dass das UserControl beim einfügen die Size(150,50) hat und diese auch immer fix ist, also NoResize im Prinzip.

    Edit:
    Habe noch das Event SizeChanged="UserControl_SizeChanged" für die UserControl entdeckt, hier setze ich die Werte für Width und Height wieder fest auf 150 bzw. 50.
    Diese "Lösung" gefällt mir aber ehrlich gesagt nicht so ganz.
    Dumm ist der, der dumm ist. Nicht andersrum!

    Dieser Beitrag wurde bereits 2 mal editiert, zuletzt von „Schmittmuthelm“ ()

    Ganz vergessen.

    XML-Quellcode

    1. <UserControl x:Class="UcDll.UcDI"
    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. xmlns:local="clr-namespace:UcDll"
    7. mc:Ignorable="d"
    8. SizeChanged="UserControl_SizeChanged"
    9. Width="150" Height="20"
    10. Margin="5">
    11. <Grid VerticalAlignment="Center">
    12. <Grid.ColumnDefinitions>
    13. <ColumnDefinition Width="20"/>
    14. <ColumnDefinition Width="*"/>
    15. </Grid.ColumnDefinitions>
    16. <Ellipse x:Name="StateIndicator"
    17. Width="20" Height="20"
    18. HorizontalAlignment="Left" VerticalAlignment="Center"
    19. Grid.Column="0" Fill="DarkGreen">
    20. <Ellipse.Stroke>
    21. <SolidColorBrush Color="{DynamicResource {x:Static SystemColors.ControlDarkDarkColorKey}}"/>
    22. </Ellipse.Stroke>
    23. </Ellipse>
    24. <Label x:Name="UcText"
    25. Padding="0" Margin="5,2,0,2"
    26. HorizontalAlignment="Left" VerticalAlignment="Center"
    27. Grid.Column="1">UcText
    28. </Label>
    29. </Grid>
    30. </UserControl>


    Das ist der komplette XAML Code des Usercontrols.
    Dumm ist der, der dumm ist. Nicht andersrum!

    Schmittmuthelm schrieb:

    Diese "Lösung" gefällt mir aber ehrlich gesagt nicht so ganz.

    Bin ich bei dir.

    Als erstes muss ich dir mal sagen. Vergiss die Toolbox.
    Was passiert wenn du das Control im XAML schreibst?

    Das problem mit Drag&Drop aus der Toolbox ist ja das hier ein Control immer mit einem Margin platziert wird. Nicht nur das es nervig ist dieses immer aus dem code zu entfernen, bist du im endeffekt mit ein wenig Übung dank der IntelliSense sowieso schneller wenn du den Code schreibst.

    Schau mal in meine Signatur, in einer der ersten Kapiteln gehe ich neher auf die Problematik mit Drag&Drop aus der Toolbox ein.
    Ich denke das könnte dein Problem sein. Ansonsten Poste doch bitte noch den XAML (oder nur einen Teil davon) deines MainWindow.

    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. ##

    Dein Tutorial werde ich mir auf jeden Fall mal zur Brust nehmen, danke!

    Wenn ich das UserControl direkt per XAML Code hinzufüge hat es die richtige Größe. Mir fehlt nur eine Eigenschaft ählin wie "sizable" die ich auf False setzen kann.

    Hast du dafür auch eine Lösung?
    Dumm ist der, der dumm ist. Nicht andersrum!

    Schmittmuthelm schrieb:

    Mir fehlt nur eine Eigenschaft ählin wie "sizable" die ich auf False setzen kann.

    Am besten du erklärst mal was du genau erreichen willst. Du hast im Usercontrol ja eine fixe größe angegeben. Diese dürfte sich auch durch eine Größenänderung des Window nicht ändern.
    Genau weis ich es aber nun auch nicht auswendig das ich stets dynamischen Arbeite uns meine Usercontrols und Windows immer so designe das sich alle automatisch anpasst. Was ja eine der stärken von WPF ist.
    Ich weis, da muss man sich umgewöhnen wenn man von winForms umsteigt aber das ist um einiges nutzerfreundlicher.

    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. ##

    Nofear23m schrieb:

    Am besten du erklärst mal was du genau erreichen willst.


    Also das UserControl füge ich per XAML ins MainWindow ein.
    Im Designer/Entwurfsfenster sieht man ja jetzt das eingefügte UserControl. Hier kann ich ja jetzt aber die Größe noch via Maus ändern, sprich wie gewohnt per Drag&Drog auf den "Rand" des Controls größer oder kleiner ziehen. (Alles zur Entwicklungszeit versteht sich)
    Genau diese "Funktion" möchte ich gar nicht haben.

    ...Wenn ich drüber nachdenk ist das eigentlich ziemlicher Käse was ich mir da gedacht hab. Die Umstellung von WinForms auf WPF hat mich scheinbar schon ganz irr gemacht ?(

    Mein eigentliches Problem hast du ja bereits gelöst, vielen Dank dafür!
    Dumm ist der, der dumm ist. Nicht andersrum!

    Schmittmuthelm schrieb:

    Genau diese "Funktion" möchte ich gar nicht haben.

    Naja, zur Entwurfszeit hast du aber nunmal die Möglichkeit. Du Überschreibst somit den Wert welchen du vorher als Fix angegeben hast. Der Wert bleibt ja auch fix, nur änderst du ihn mit dem Ziehen per Maus.

    Wie schon gesagt, du tust dir einen gefallen wenn du dich von Designer verabshiedest. Der ist ganz gut um zu sehen wie es dann später aussehen wird, aber um direkt darin zu "hantieren" oder per Drag&Drop zu arbeiten ist er nix. Dafür wurde er im Grunde auch nicht gemacht. Auch MS empfiehlt den XAML zu schreiben.

    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. ##