none
Eigene UWP Controls RRS feed

  • Allgemeine Diskussion

  • Wir möchten eine eigene UWP Control Library erstellen und haben hierzu das Projekt MSA.Controls angelegt. Im ersten Schritt sollen nur bestehende Controls erweitert und in unseren verschiedenen Apps genutzt werden. Leider funktioniert das anscheinen ganz anders unter dem "klassischen" WPF.

    Beispiel: mzTextBox

    namespace MSA.Controls
    {
        public sealed class mzTextBox : TextBox
        {
            public mzTextBox()
            {
                this.DefaultStyleKey = typeof(MSA.Controls.mzTextBox);
                Identifier = new Identifier();
            }
            public Identifier Identifier
            {
                get { return (Identifier)GetValue(IdentifierProperty); }
                set { SetValue(IdentifierProperty, value); }
            }
            public static readonly DependencyProperty IdentifierProperty = DependencyProperty.Register("Identifier", typeof(Identifier), typeof(MSA.Controls.mzTextBox), PropertyMetadata.Create(new Identifier()));

    In der Generic haben wir nichts, da wir nicht das Aussehen ändern wollen

    Desweiteren haben wir eine UWP Test App angelegt und einen Verweis auf die MSA.Controls Library zugewiesen.

    In der MainPage haben wir eine Referenz erstellt

    <Page
        x:Class="XAMLTestApp.MainPage"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="using:XAMLTestApp"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:msa="using:MSA.Controls"
        mc:Ignorable="d"
        Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

        <Grid>
            <msa:mzTextBox Width="100" Height="30" Header="Test" />

        </Grid>
    </Page>

    Aber schon beim Einbinden der mzTextBox wird diese unterstrichen und "XDG0008 Der Name "mzTextBox ist im Namespace "using.MSA.Controls" nicht vorhanden". Es wird auch nicht angezeigt.

    Was muss unter UWP anders umgesetzt werden als unter dem klassischen WPF. Leider hilft hier Google auch nicht weiter, deshalb hoffe ich hier auf Unterstützung.

    Donnerstag, 24. Mai 2018 14:26

Alle Antworten

  • Hi,
    in einer UWP ist mit Steuerelemente-Bibliotheken genau so zu verfahren, wie in anderen Projekttypen. Wichtig dabei ist, dass zuerst die Bibliothek fehlerfrei übersetzt wird. Wenn das nicht möglich war, können auch im Haupt-Projekt die Elemente der Bibliothek nicht genutzt werden.

    Deshalb ist die erste Frage: "Ist die Bibliothek fehlerfrei übersetzt worden?".


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks

    Donnerstag, 24. Mai 2018 16:51
  • Hallo,

    ich hatte bisher auch noch nie Probleme eigene Controls in UWP zu schreiben und zu nutzen.

    Du kannst dir auch anschauen wie MS Controls im Community Toolkit erstellt, das gesamte Projekt ist auf GitHub 

    Gruß Thomas


    13 Millionen Schweine landen jährlich im Müll
    Dev Apps von mir: Icon für UWP, UI Strings
    Andere Dev Apps: UWP Community Toolkit Sample App

    Donnerstag, 24. Mai 2018 17:29
  • Langsam verstehe ich, warum so wenig Entwickler auf UWP umsteigen. Es ist einfach frustrierend. Es funktioniert nicht so wie man es kennt, es gibt minimale Informationen im Netz, die Anleitung von MS (...sprechen wir nicht davon), ich bin auch kurz davor wieder auf das klassische WPF zurück zu kehren.

    Ich habe raus bekommen das mein oben beschriebenes Problem an der Generic.xaml liegt. Nun habe ich versucht ein einfaches Beispiel aus dem klassischen WPF zu adaptieren. Ergebnis. Es wird zwar angezeigt, funktioniert aber nicht, keine Eingabe in die Textbox möglich. Es gibt auch im ganzen Netz kein Coding für eine eigene UWP TextBox.

        <Style TargetType="local:mzTextBox" >
            <Setter Property="HorizontalAlignment"              Value="Stretch"/>
            <Setter Property="VerticalAlignment"                Value="Stretch"/>
            <Setter Property="VerticalContentAlignment"         Value="Center"/>
            <Setter Property="HorizontalContentAlignment"       Value="Left"/>
            <Setter Property="AllowDrop"                        Value="True"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="local:mzTextBox">
                        <Border BorderThickness="2" BorderBrush="Black" Background="LightGray">
                            <ScrollViewer x:Name="PART_ContentHost"  />
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

    Hat noch jemand eine Idee?

    Freitag, 25. Mai 2018 15:53
  • Hi,
    ich verstehen Deinen Frust nicht so richtig. Wenn man berücksichtigt, dass es in UWP Anwendungen etwas weniger Möglichkeiten als in klassischen WPF Anwendungen, sollte es bezüglich dem Programm Design keine Probleme geben.

    Bisher habe ich aus Deinen Beiträgen nicht so richtig verstanden, was Dein Ziel ist und welches konkrete Problem auftritt. Wenn Du eine eigene TextBox mit einem abweichenden Design und einer abweichenden Funktionalität haben willst, dann beschreibe mal etwas genauer, was Du erreichen willst/musst.

    In Deinem geposteten Style gibt es für die Text-Darstellung und -Eingabe im Template kein Steuerelement. So etwas funktioniert auch in einer WPF Anwendung nicht.


    --
    Viele Grüsse
    Peter Fleischer (ehem. MVP)
    Meine Homepage mit Tipps und Tricks


    Freitag, 25. Mai 2018 16:52
  • Langsam verstehe ich, warum so wenig Entwickler auf UWP umsteigen. ...

    Der Gedanke ist der genau falsche. UWP war nie dafür gedacht, um von WPF (oder WinForms) umzusteigen. UWP ist eine weitere Projektform. Und man sollte sich im Vorfeld klar machen, welche Anforderungen an eine Anwendung/App gestellt werden, um dann die Optimale zu wählen.

    Bei den ersten UWP hatte ich auch einige Probleme und dachte, da geht ja gar nichts. Aber wenn man sich mal reingearbeitet hat erscheinen einem die Unterschiede marginal.

    Ich denke wenn du etwas genauer beschreibt, was du vor hast, ist die Lösung nicht sehr kompliziert.

    Gruß


    Freiberufler im Bereich Softwareentwicklung Von der PLC und Robotik zu VB.NET & C#, vorrangig WPF und UWP

    Freitag, 25. Mai 2018 21:04