Laden...

dynam. Controls einblenden neben vorhandenen Controls.

Erstellt von Mega vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.024 Views
M
Mega Themenstarter:in
14 Beiträge seit 2009
vor 14 Jahren
dynam. Controls einblenden neben vorhandenen Controls.

Hallo!

Ich sitze an einer Funktion in WPF mit dem ich beim Enter also aktivieren eines Controls(z.B. Textbox) Dieses Vergrössern kann + weitere Informationen und Möglichkeiten anhand einer direkt neben der TB eingeblendeten ListBox. Bildern etc.

Über die Architektur dieser Funktion habe ich mir schon Gedanken gemacht, Klasse + Pseudo Methoden erstellt, etc. aber ich denke zu stark an "Windows.Forms". =)

:::

:::

Danke für Ideen und weitere Ansätze.

BTW. gibt es in WPF kein Einheitliches Ereignis für Textbox_Enter?

446 Beiträge seit 2004
vor 14 Jahren

:::

Hallo,

Grids werden standardmäßig beim erstellen eines Windows und UserControls im Content mit angelegt. Diese solltest du aber meiden. Wenn du mit Grids, StackPanel arbeitest wird sich der Content nie der Window / UserControl größe anpassen, wenn sich diese zur Laufzeit ändert.

Du solltest immer mit DockPanels arbeiten.

:::

Ich verstehe dein problem nicht ganz. Du kannst mit Width und Height die Größe des UserControls ändern.

Zb. kannst du das so machen.

                               <TextBox>
                                    <TextBox.Style>
                                        <Style TargetType="{x:Type TextBox}">
                                            <Setter Property="Width" Value="100"></Setter>
                                            <Setter Property="VerticalAlignment" Value="Top"></Setter>
                                            <Setter Property="HorizontalAlignment" Value="Left"></Setter>
                                            <Style.Triggers>
                                                <Trigger Property="IsFocused" Value="True">
                                                    <Setter Property="Height" Value="50"></Setter>
                                                    <Setter Property="Width" Value="200"></Setter>
                                                </Trigger>
                                            </Style.Triggers>
                                        </Style>
                                    </TextBox.Style>
                                </TextBox>

Du kannst das natürlich auch im CodeBehind regeln oder ein anderes Event dazu verwenden.

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

3.430 Beiträge seit 2007
vor 14 Jahren

Hallo Mega,

Eigentliche Textbox unsichtbar machen, dynamische per C# Code erzeugte grössere Textbox einblenden, beim deaktivieren der großen Textbox, Wert an kleine Tb übergeben.
Aber wie ich den Ort der kleinen TB bestimmen soll??

Umständlicher geht es in WPF wohl nicht mehr 😃

Nö, also ich habe so etwas Ähnliches auch vor Kurzem gemacht.
Dabei habe ich von der TextBox abgeleitet (CustomControl).
Dann habe ich dieser einen Expander (Pfeil auf den man klicken kann - Wie bei ComboBox) hinzugefügt. Wenn man auf diesen klickt öffnet sich automatisch ein Popup auf den den deine zusätzlichen Controls positionieren kannst.
In meinem Fall war es ein DateTimePicker für Touchscreens.

Wenn dir das nicht gefällt dann könntest du schon irgendwie die von dir geposteten Lösungen implementieren.
Aber dabei würde ich diese anderen Controls nur auf Visibility.Collapsed setzen wenn du diesen nicht brauchst, denn dann kannst du sie einfach mit einen Trigger einblenden.

Grüsse
Michael

446 Beiträge seit 2004
vor 14 Jahren

Ich hab da noch ein wenig herum gespielt.

Du must es eigentlich nur noch anpassen.

                                <TextBox >
                                    <TextBox.Style>
                                        <Style TargetType="{x:Type TextBox}">
                                            <Setter Property="Width" Value="100"></Setter>
                                            <Setter Property="VerticalAlignment" Value="Top"></Setter>
                                            <Setter Property="HorizontalAlignment" Value="Left"></Setter>
                                            <!--<Style.Triggers>
                                                <Trigger Property="IsFocused" Value="True">
                                                    <Setter Property="Height" Value="50"></Setter>
                                                    <Setter Property="Width" Value="200"></Setter>
                                                </Trigger>
                                            </Style.Triggers>-->
                                        </Style>
                                    </TextBox.Style>
                                    <TextBox.Triggers>
                                        <EventTrigger RoutedEvent="Button.KeyDown">
                                            <EventTrigger.Actions>
                                                <BeginStoryboard>
                                                    <Storyboard TargetProperty="Height">
                                                        <DoubleAnimationUsingKeyFrames Duration="0:0:0.001">
                                                            <DiscreteDoubleKeyFrame Value="50"></DiscreteDoubleKeyFrame>
                                                        </DoubleAnimationUsingKeyFrames>
                                                        <DoubleAnimationUsingKeyFrames Duration="0:0:0.001" Storyboard.TargetProperty="FontSize">
                                                            <DiscreteDoubleKeyFrame Value="50"></DiscreteDoubleKeyFrame>
                                                        </DoubleAnimationUsingKeyFrames>
                                                    </Storyboard>
                                                </BeginStoryboard>
                                            </EventTrigger.Actions>
                                        </EventTrigger>
                                        <EventTrigger RoutedEvent="Button.LostFocus">
                                            <EventTrigger.Actions>
                                                <BeginStoryboard>
                                                    <Storyboard TargetProperty="Height">
                                                        <DoubleAnimationUsingKeyFrames Duration="0:0:0.001">
                                                            <DiscreteDoubleKeyFrame Value="12"></DiscreteDoubleKeyFrame>
                                                        </DoubleAnimationUsingKeyFrames>
                                                        <DoubleAnimationUsingKeyFrames Duration="0:0:0.001" Storyboard.TargetProperty="FontSize">
                                                            <DiscreteDoubleKeyFrame Value="20"></DiscreteDoubleKeyFrame>
                                                        </DoubleAnimationUsingKeyFrames>
                                                    </Storyboard>
                                                </BeginStoryboard>
                                            </EventTrigger.Actions>
                                        </EventTrigger>
                                    </TextBox.Triggers>
                                </TextBox>

Schaut mal im IRC vorbei:
Server: https://libera.chat/ ##chsarp

M
Mega Themenstarter:in
14 Beiträge seit 2009
vor 14 Jahren

Ok, nun zum besseren Verständnis, habe ich mal was vorbereitet:

TextBox ist in einem Border.
Vergrößern ist Ansich kein Thema, nur ist die Textbox in ihrem Container gefangen und kann sich optisch davon nicht befreien, oder gibt es da etwas in WPF:

Ausserdem sollen neben(oder unter, über) der Textbox Elemente erscheinen, sobald man Textbox entert...

Ich werde viele TBs haben, deshalb möchte ich eine Methode haben die universell für alle funktioniert und möglichst ohne Custom Control.
Ich Programiere GUI Ereignisse, Animationen momentan Funktionen ausschliesslich in C#.
An WPF muss ich mich erst gewöhnen, meine ersten Projekte habe ich bisher in Win.Forms gemacht.
Ich denke in Win.Forms wäre das auch insgesamt einfacher 😃.

3.430 Beiträge seit 2007
vor 14 Jahren

Hallo,

nö mit WinForms ist das nicht einfacher.
In WPF sind nur manche Dinge anders und deshalb scheint es oft ein wenig eigenartig zu sein.

Wieso möchtest du kein CustomControl erstellen? Damit könntest du schön deine TextBox um die Funktionalität erweitern. Wie willst du das denn sonst machen.
Wenn du das alles in dein Haupform reinknallst kennt man sich ja nicht mehr aus und es wird viel komplexer.

Wie schon gesagt habe ich das schon gemacht.
Und dazu eignet sich das PopupControl perfekt. Dieses klappt sich schön auf (Position kann eingestellt werden) und überdeckt dann die anderen Controls.
Es kann also auch über den eigentlichen Container (Border) der Textbox hinausragen.

Und durch das CustomControl hast du deine neuen Funktionalitäten der TextBox schön in einem Control und kannst es verwenden wie die normale TextBox.

Gruss
Michael

M
Mega Themenstarter:in
14 Beiträge seit 2009
vor 14 Jahren

Danke für die vielen Antworten,
ich denke das UserControl wird es sein!
Ich werde es probieren.

👅