Laden...
C
CoderboyPB myCSharp.de - Member
Softwareentwickler Paderborn Dabei seit 09.01.2008 327 Beiträge
Benutzerbeschreibung

Forenbeiträge von CoderboyPB Ingesamt 327 Beiträge

12.12.2017 - 10:07 Uhr

Nur komischerweise funktioniert das INotifyDataErrorInfo aber auch, ohne dass ich das ErrorChanged Event auslöse ...

12.12.2017 - 09:48 Uhr

wenn ich das Interface implementiere bekomme ich ja folgendes Event erzeugt:


public event EventHandler<DataErrorsChangedEventArgs> ErrorsChanged;

Irgendwie werde ich aus diesem Event nicht ganz schlau:
Ist das für die Validierung wichtig, oder ist das lediglich für mich als Programmierer (optional) zu feuern um dann an anderer Stelle das Event zu abonnieren?

12.12.2017 - 09:39 Uhr

Hallo,
habe jetzt weiter hart gearbeitet, aber eine Frage ist dann noch noch offen geblieben:

Es gebt um folgende Validierung:


<TextBox.Text>
                <Binding Path="Price" UpdateSourceTrigger="PropertyChanged" >
                    <Binding.ValidationRules>
                        <local:CustomValidation2/>
                        <local:CustomValidation1/>
                    </Binding.ValidationRules>
                </Binding>
            </TextBox.Text>

CustomValidiation1 validiert ob die Eingabe nicht größer als 100 ist
CustomValidation2 validiert, ob die Zahl nicht gerade ist
(Das sind einfach nur Phantasievorgaben zum Spielen und Testen)

Jetzt ist es aber so, dass Validation.Errors immer nur max. 1 ErrorContent Objekt enthält auch wenn beide Validierungen fehlschlagen. Die Collection enthält grundsätzlich immer den Fehler, der durch die erste im Code stehende Validierung erzeugt wird.

Gibt es irgendwie ne Möglichkeit, dass BEIDE Fehler in Validation.Errors übernommen werden?
Oder geht das nur über den INotifyDataErrorInfo Weg?

11.12.2017 - 13:25 Uhr

Vielen Dank 😃

11.12.2017 - 13:02 Uhr

Danke für deine Antwort,

der erste Vorschlag funktioniert nicht, denn sobald man eine Hintergrundfarbe des Borders setzt, liegt diese ÜBER dem Control.

Aber der Ansatz mit dem Trigger, der funktioniert.

Habe jetzt verstanden: Will ich die Erscheinungsweise des validierten Elements ändern, z.B. mit Zusatz Text oder einem Border dekorieren, dann ErrorTemplate, die Modifizierung des Elements selber aber mittels Trigger.

Dafür macht man ja diese Beispiele, um zu lernen und zu begreifen, und um eben auf solche Hürden zu stoßen, denn nun ist es in meinem Kopf verankert.

10.12.2017 - 18:51 Uhr

Ich habe folgendes ControlTemplate als ErrorTemplate:


<ControlTemplate x:Key="errorTemplate">
            <Grid>
                <Border Background="#33FF0000" BorderBrush="Red" BorderThickness="1">
                    <AdornedElementPlaceholder />
                </Border>
            </Grid>
</ControlTemplate>

Optisch funktioniert das Ganze sogar: Der Hintergrund der Eingabe TextBox wird hellrot, allerdings hat dieser Ansatz einen Haken: Durch den Border Background wird die Eingabe Box verdeckt, heißt, ich bekomme zwar eine optische Validierung, kann nun aber keine Eingabe mehr machen.

Habe schon alles mögliche ausprobiert, aber komme da zu keiner Lösung, egal, was und wie ich es mache, sobald ich Hintergrundfarben setze, verdecken diese die TextBox, und an die TextBox selber komme ich nicht ran, da die Property 'AdornedElement' - entgegen der MSDN - nicht vorhanden ist.

Irgendwelche Lösungsansätze?

10.12.2017 - 05:33 Uhr

Habe ich das richtig verstanden:

Bei INotifyDataErrorInfo bin ich selbst in den Settern der Properties dafür verantwortlich, dass keine invaliden Werte gesetzt werden, die Schnittstelle sorgt lediglich dafür, dass die Fehler angezeigt werden.

Und bei der Verwendung von ValidationRules verhindern diese auch parallel das Setzen der Property mit invaliden Werten?

30.11.2017 - 04:04 Uhr

Ok, das habe ich verstanden, aber was meinst du mit Vorgängerklasse? Meinst du damit die Mutterklasse, von der FlipPanel abgeleitet ist?

29.11.2017 - 21:34 Uhr

Hab noch mal ne Verständnisfrage zu dieser Zeile:

DefaultStyleKeyProperty.OverrideMetadata(typeof(FlipPanel), new
                  FrameworkPropertyMetadata(typeof(FlipPanel)));

Das bedeutet ja, dass ich im Grunde genommen das vorhandene Style mit dem selben Style wieder überschreibe.
Aber ist es richtig, dass ich durch diesen Aufruf erzwinge, dass neu geschaut wird, WO das Style ist, und der themes/generic Ordner dann die erste Position ist, an der gesucht wird, und erst wenn da dann nichts zu finden ist, das Default Style verwendet wird?

29.11.2017 - 13:24 Uhr

Abt, du bist genial, ich danke dir 👍
Ich bin mir zwar sicher, dass ich das auch schon mal hatte (ich hatte ja erst sämtliche Optionen durchprobiert, bevor ich hier gepostet habe), aber jetzt funktioniert es.

29.11.2017 - 13:09 Uhr

Hallo, ich stehe mal wieder wie nen Ölgötze vorm Berg:

Ich habe ein von Control abgeleitetes Element in dem ich im static Konstruktor das DefaultStylesheet überschreibe:


public class FlipPanel : Control
{
    static FlipPanel()
        {
            DefaultStyleKeyProperty.OverrideMetadata(typeof(FlipPanel), new 
                  FrameworkPropertyMetadata(typeof(FlipPanel)));
        }
}

Genau nach Anleitung im Buch habe ich einen themes Ordner erstellt, und in diesem ein File namens generic.xaml erstellt, sowie ein weiteres XAML File mit dem Style für FlipControl

Die Datei generic.xaml enthält:


<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <ResourceDictionary.MergedDictionaries>
        <ResourceDictionary Source="FlipPanel.xaml" />
    </ResourceDictionary.MergedDictionaries>
</ResourceDictionary>

Hier der Anfang von FlipPanel.xml:


<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                    xmlns:local="clr-namespace:CustomControls">
    <Style TargetType="{x:Type local:FlipPanel}">
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type local:FlipPanel}">
                    <Grid>
                     .....
                    </Grid>

                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
</ResourceDictionary>

Wenn ich nun das Control in Anwendung einfüge, erscheint das Control blau unterkringelt und da steht:> Fehlermeldung:

Die Ressource "flippanel.xaml" konnte nicht gefunden werden

Was läuft hier schief?

24.11.2017 - 13:36 Uhr

Naja, keine gute Vorgehensweise, denn als Anfänger und Lernender ist man schon so ausreichend mit dem neuen Stoff beschäftigt und auf diesen fokussiert ...

Ist ja nicht so, dass ich die Listing nicht selber ausprobiere.

Ich kopiere sie aus dem EBook, füge sie in VisualStudio ein, formatiere sie wieder richtig und dann arbeite ich sie durch. Wenn dann die Codes falsch sind, verwirrt das nur.

24.11.2017 - 13:07 Uhr

Sodele ...

Habe den 'fehlerfreien' Resourcen-Code wie er in <App.Resources> definiert war 1:1 in <Window.Resources> kopiert, und jetzt kommt der Hammer:

Während VS die ganze Zeit mir den Code als fehlerfrei angezeigt hatte, war VS nun die Reihenfolge der Resourcen nicht mehr egal, und es gab etliche Fehlermeldungen.

Nach dem ich diese nun korrigiert hatte, lief das Programm tatsächlich im Releasemodus, während im DebugModus ein Fehlerfenster aufpoppte, der aber auch keinen Hinweis auf den tatsächlichen Fehler enthielt.

Naja, da hatte ich die Schnauze endgültig gestrichen voll, und habe nicht nur VS, sondern gleich den ganzen Rechner neugestartet.

Jetzt läuft es.

Mein 'Aller herzlichster Dank' gilt dem Bauchautor, der den Code schon im Buch in der falschen Reihenfolge hat und VS, das mir die ganze Zeit (bis zum Umkopieren der Resourcen) den Code als richtig angezeigt hatte ... Chapeau ... 😭

24.11.2017 - 12:23 Uhr

So, anbei der Screenshot, der nichts sagenden VS Meldung.

Folgender Sachverhalt liegt vor:

Starte ich die Release Version, dann startet die App erst gar nicht, bzw. das Fenster erscheint nicht, starte ich es in der Debug Version, dann siehe Screenshot.

Jetzt kommts aber:

Entferne ich in der MainWindow.XAML die ListBox, mit der ich die Instanziierung und Anzeige der Scrollbar veranlasse, und es bleibt das leere Fenster zurück, dann startet die Anwendung ohne Fehler und es wird (das leere Fenster) angezeigt. Es ist also irgendwas mit dem Scrollbar Template aus dem anderen Thread ...

24.11.2017 - 02:45 Uhr

Folgendes Beispiel stammt aus dem Buch Pro WPF 4.5 von Andrew McDonald

Ich habe bereits ein paar offensichtliche Fehler korrigiert, aber jetzt bin ich nach rund 2 Stunden mit meinem Latein am Ende:

Warum erzeugt folgender XAML Code, der laut Editor fehlerfrei ist und selbst in der XAML Vorschau angezeigt wird, die Fehlermeldung 'Die Anwendung befindet sich im Haltemodus' ?

Das ist jetzt echt eine Stufe zu hoch für mich, da hoffe ich jetzt auf die UserKompetenz hier im Board.

PS: Die Farben sind Phantasiefarben, also nicht wundern ...


<Application.Resources>
        <SolidColorBrush Color="Blue" x:Key="StandardBrush"></SolidColorBrush>
        <SolidColorBrush Color="Black" x:Key="StandardBorderBrush"></SolidColorBrush>
        <SolidColorBrush Color="Black" x:Key="GlyphBrush"></SolidColorBrush>
        <SolidColorBrush Color="Green" x:Key="PressedBrush"></SolidColorBrush>
        
        <ControlTemplate x:Key="VerticalScrollBar" TargetType="ScrollBar">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition MaxHeight="18"/>
                    <RowDefinition Height="*"/>
                    <RowDefinition MaxHeight="18"/>
                </Grid.RowDefinitions>
                <RepeatButton 
                    Grid.Row="0" 
                    Height="18"      
                    Style="{StaticResource ScrollBarLineButtonStyle}"      
                    Command="ScrollBar.LineUpCommand" >
                    <Path Fill="{StaticResource GlyphBrush}"       
                          Data="M 0 4 L 8 4 L 4 0 Z">
                    </Path>
                </RepeatButton>
                <Track Name="PART_Track" Grid.Row="1" IsDirectionReversed="True" ViewportSize="0">
                    <Track.DecreaseRepeatButton>
                        <RepeatButton Command="ScrollBar.PageUpCommand" Style="{StaticResource ScrollBarPageButtonStyle}"/>
                    </Track.DecreaseRepeatButton>
                    <Track.Thumb>
                        <Thumb Style="{StaticResource ScrollBarThumbStyle}"/>
                    </Track.Thumb>
                    <Track.IncreaseRepeatButton>
                        <RepeatButton Command="ScrollBar.PageDownCommand" Style="{StaticResource ScrollBarPageButtonStyle}"/>
                    </Track.IncreaseRepeatButton>
                </Track>
                <RepeatButton 
                    Grid.Row="3" 
                    Height="18"      
                    Style="{StaticResource ScrollBarLineButtonStyle}"      
                    Command="ScrollBar.LineDownCommand" >
                    <Path Fill="{StaticResource GlyphBrush}"       
                          Data="M 0 0 L 4 4 L 8 0 Z">
                    </Path>
                </RepeatButton>
            </Grid>
        </ControlTemplate>

        <Style TargetType="ScrollBar">
            <Setter Property="SnapsToDevicePixels" Value="True"/>
            <Setter Property="OverridesDefaultStyle" Value="true"/>
            <Style.Triggers>
                <Trigger Property="Orientation" Value="Vertical">
                    <Setter Property="Width" Value="18"/>
                    <Setter Property="Height" Value="Auto" />
                    <Setter Property="Template" Value="{StaticResource VerticalScrollBar}" />
                </Trigger>
            </Style.Triggers>
        </Style>

        <Style x:Key="ScrollBarThumbStyle" TargetType="Thumb">
            <Setter Property="IsTabStop" Value="False"/>
            <Setter Property="Focusable" Value="False"/>
            <Setter Property="Margin" Value="1,0,1,0" />
            <Setter Property="Background" Value="{StaticResource StandardBrush}" />
            <Setter Property="BorderBrush" Value="{StaticResource StandardBorderBrush}" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="Thumb">
                        <Ellipse Stroke="{StaticResource StandardBorderBrush}"         
                                 Fill="{StaticResource StandardBrush}"/>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style x:Key="ScrollBarLineButtonStyle" TargetType="RepeatButton">
            <Setter Property="Focusable" Value="False"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="RepeatButton">
                        <Grid Margin="1">
                            <Ellipse 
                                Name="Border" 
                                StrokeThickness="1"           
                                Stroke="{StaticResource StandardBorderBrush}"           
                                Fill="{StaticResource StandardBrush}"/>
                            <ContentPresenter 
                                HorizontalAlignment="Center"           
                                VerticalAlignment="Center"/>
                        </Grid>
                        <ControlTemplate.Triggers>
                            <Trigger Property="IsPressed" Value="true">
                                <Setter TargetName="Border" Property="Fill" Value="{StaticResource PressedBrush}" />
                            </Trigger>
                        </ControlTemplate.Triggers>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

        <Style x:Key="ScrollBarPageButtonStyle" TargetType="RepeatButton">
            <Setter Property="IsTabStop" Value="False"/>
            <Setter Property="Focusable" Value="False"/>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="RepeatButton">
                        <Border Background="Transparent" />
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
        
    </Application.Resources>

24.11.2017 - 01:56 Uhr

Die Aussage dieser Fehlermeldung ist ja in etwa so gehaltvoll, als würde in riesen Lettern dort

BLAHHHHHHH

auf dem Bildschirm erscheinen ...

Gibt es irgendwie ne Möglichkeit, da dennoch an eine aussagekräftige Fehlermeldung ranzukommen, denn ich bin inzwischen hier mit meinem Latein am Ende, was VS zu k*cken hat ... 😭

23.11.2017 - 12:19 Uhr

Werde wohl auch den bequemeren 2. Weg gehen.
Danke dir 😃

23.11.2017 - 10:55 Uhr

<Style TargetType="{x:Type Button}">  
      <Setter Property="Control.Template" Value="{StaticResource ButtonTemplate}" 
</Style> 


<Style TargetType="Button">  
      <Setter Property="Template" Value="{StaticResource ButtonTemplate}" 
</Style> 

So wie oben steht es im Buch, aber es geht auch ohne x:Type und Control (siehe unten)

Welche Variante sollte man jetzt bevorzugen, und welchen Vorteil hätte diese gegenüber der Anderen?

23.11.2017 - 06:52 Uhr

Hallo liebe Community,

Ich habe gestern folgenden sehr guten Artikel über Attached Properties und ihre Anwendungen gefunden, den ich euch nicht vorenthalten möchte

XAML Magic: Attached Properties

Viel Spaß damit 🙂

16.11.2017 - 07:23 Uhr

Ich selbst arbeite folgendes Buch gerade durch, ja verschlinge es.
Kann es dir nur empfehlen, solange du keine Angst vor einem englischsprachigen Buch hast.

https://www.amazon.de/Pro-WPF-4-5-Presentation-Professional/dp/1430243651

14.11.2017 - 16:33 Uhr

Ich arbeite derzeit das Buch Pro WPF von Mathew MacDonald durch, und bin jetzt auf folgende eigene Lösung gestoßen:

Ich leite mir von Canvas eine eigene Klasse ab, der ich eine Member-Methode SetCircle(...) hinzufüge
Diese basiert dann intern auf der Path Klasse, welche mir über EllipseGeometry die Möglichkeit gestattet den Kreis per Mittelpunkt setzen zu können.


class MyCanvas : Canvas
    {
        public void setCircle(Point center, double radius, Brush fillColor, Pen pen = null)
        {
            var path = new Path();
            path.Fill = fillColor;
            if(pen != null)
            {
                path.Stroke = pen.Brush;
                path.StrokeThickness = pen.Thickness;
            }

            path.Data = new EllipseGeometry(center, radius, radius);
            this.Children.Add(path);
        }

        public void setCircle(double mx, double my, double radius, Brush fillColor, Pen pen = null)
        {
            setCircle(new Point(mx, my), radius, fillColor, pen);
        }
    }

Über XAML kann die abgeleitete Canvas einfach wie folgt eingebunden werden:


<Grid>
        <local:MyCanvas x:Name="myCanvas"/>
    </Grid>

Und kann dann im Codebehind verwendet werden:


public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            myCanvas.setCircle(27, 85, 2, Brushes.Red);
        }
    }

Denkbar wäre jetzt natürlich noch, die Canvas um ein mathematisches Koordinatensystem zu erweitern, welchem man z.B. via Dependency Properties noch die Reichweite des mathematischen Koordinatensystems mitgibt, welches die Canvas dann automatisch in Canvas Koordinaten umrechnet. z.B. wenn ich einen Kreis an (0,0) setze, erscheint der tatsächlich in der Mitte der Canvas, so das Koordinatensystem auch über einen gleichgroßen negativen Bereich verfügt.

Ich denke die Möglichkeiten sind da vielschichtig.

23.10.2017 - 22:54 Uhr

Ich habe auf Youtube ein Video gesehen, in dem der Autor in Blend eine Kreisbogen Form benutzt:
https://www.youtube.com/watch?v=GKrUAwEQ3Xc

In dem Video könnt ihr es direkt von Anfang an sehen, dass der da 'tausende' an Shapes hat. Ich habe da aber nur Rectangle und Ellipse.

Woran liegt es? Fehlt mir dazu eine Pro Version von Blend? (Gibt es sowas) und (wenn möglich) wie kann ich diese Shapes nachladen?

Ich habe unten mal meine Programm Info meines Blends angehängt.

Microsoft Blend für Visual Studio Community 2017
Version 15.1 (26403.7) Release
VisualStudio.15.Release/15.1.0+26403.7
Microsoft .NET Framework
Version 4.7.02046

Installierte Version: Blend

Visual Basic 2017 00369-60000-00001-AA852
Microsoft Visual Basic 2017

Visual C# 2017 00369-60000-00001-AA852
Microsoft Visual C# 2017

Visual C++ 2017 00369-60000-00001-AA852
Microsoft Visual C++ 2017

NuGet-Paket-Manager 4.1.0
NuGet-Paket-Manager in Visual Studio. Weitere Informationen zu NuGet finden Sie unter "http://docs.nuget.org/".

Visual Studio Tools für universelle Windows-Apps 15.0.26403.07
Mit den Visual Studio Tools für universelle Windows-Apps können Sie eine universelle App-Erfahrung erstellen, die auf jedem Gerät genutzt werden kann, das Windows 10 ausführt: Smartphone, Tablet, PC und viele weitere Geräte. Das Microsoft Windows 10 SDK ist in den Tools enthalten.

27.12.2016 - 09:56 Uhr

Im Grunde genommen nichts, ist eh keine echte Anwendung, geht nur ums blanke ausprobieren, und darum, dass das Ganze endlich mal im Hirn haften bleibt, deshalb die Praxis ... 8)

27.12.2016 - 08:50 Uhr

Merci 😃

Da muss man natürlich erstmal draufkommen, anstatt blind in die Fähigkeiten von Link zu vertrauen.

Habe den Ausdruck jetzt zweigeteilt, also im ersten Schritt die sortierte Liste als IEnumarable<> zurückgeben lassen und darauf dann quasi Linq to Objects angewendet, und nun funzt es 😃

27.12.2016 - 08:32 Uhr

verwendetes Datenbanksystem: MSSQL Server Express

Spiele gerade ein wenig mit LINQ und der Northwind Datenbank herum.
Die folgende Abfrage soll erst alle Produkte sortieren und dann alle überspringen, so lange diese nicht mit S beginnen, was bedeutet, die Ausgabe soll bei S beginnen.


NorthwindEntities db = new NorthwindEntities();
var products = db.Products
                                .OrderBy(p=>p.ProductName)
                                .SkipWhile(p => !p.ProductName.StartsWith("S"))
                                .Select(p => p.ProductName);

Ich bekomme folgende Fehlermeldung, aus der ich auch nach zig maligen Versuchen nicht schlau werde:

Ein Ausnahmefehler des Typs "System.NotSupportedException" ist in EntityFramework.SqlServer.dll aufgetreten.

Fehlermeldung:
Zusätzliche Informationen: 'LINQ to Entities' erkennt die Methode 'System.Linq.IQueryable1[LinkTest.Product] SkipWhile[Product](System.Linq.IQueryable1[LinkTest.Product], System.Linq.Expressions.Expression1[System.Func2[LinkTest.Product,System.Boolean]])' nicht, und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.

27.10.2016 - 18:48 Uhr

Macht eh kein Sinn, hatte ja ganz vergessen, dass ne Ellipse keine Koordinaten hat, sondern diese in der Canvas gespeichert werden ...

27.10.2016 - 16:25 Uhr

Gibt es eine Möglichkeit, einen Kreis nicht über den Eckpunkt der Boundingbox, sondern - wie es eigentlich auch sinnvoll wäre - über den Mittelpunkt zu platzieren?

Mein ursprünglicher Plan war es ja eine Klasse cEllipse (c für centered) von Ellipse abzuleiten, in der man im Konstruktor den Mittelpunkt angibt, welche dann in die Koordinaten der Boundingbox umgerechnet werden, und dann an den Konstruktor der Mutterklasse übergeben werden.

Aber, da habe ich die Rechnung ohne Microsoft gemacht, die die Ellipse Klasse sealed gemacht haben ...

Kann man da vielleicht was mit SetOrigin machen?

05.07.2016 - 14:20 Uhr

Wie kann das sein, dass immer wieder neuseeländische Webseiten nicht geladen werden, bzw. erst nach mehreren Versuchen?

Weiß das hier jemand, und kann das technisch begründen?

05.03.2015 - 21:18 Uhr

Ah OK, Danke.

Kannte die vorher noch gar nicht. Kannte nur die Allgemeinen DataSets, deswegen stand ich etwas auf dem Schlauch.

Werde mir das in Kürze mal anschauen 😃

05.03.2015 - 16:39 Uhr

verwendetes Datenbanksystem: <bitte immer angeben>

Es geht um folgendes Video an der Stelle 16:53

Leider wird auf die Datenbankanbindung nicht groß eingegangen, aber für mich sieht das aus wie EF. Liege ich da richtig?

Sorry, dass der Code Schnipsel in VB ist, ich bin damit auch nicht glücklich, aber es geht ja hier um die Datenbank, bzw. die Anbindung ...

https://www.youtube.com/watch?v=XhOYrVrU8BM

26.04.2014 - 22:27 Uhr

Zuerst das Schlechte:

Die Playlist ist NICHT in der Reihenfolge der Videos, aber die Videos sind in der richtigen Reihenfolge numeriert.
Hinzu kommt, dass die Bildqualität leider ziemlich fürn Arsch ist, aber es IST noch alles erkennbar, wenn auch teilweise grenzwertig, aber man gewöhnt sich dran.

ABER es lohnt sich!!!

Angefangen wird ganz von vorne, wo erst mal erklärt wird, was XAML überhaupt ist.
Dann kommen die Container und die Controls welche sehr ausführlich erklärt werden.
Weiter dann

  • Element Binding
  • Data Binding
  • 2D Graphiken
  • Animationen
  • Verteilungen der fertigen Anwendungen, XBAP, etc
  • WCF Einbindung
    und ganz zum Schluss Interoperabilität zwischen Windows Forms und WPF

Was fehlt sind MVVM und Command Binding, aber das findet man in anderen Tutorials.

Video-Playlist: WPF Complete Tutorials ( Windows Presentation Foundation )

26.04.2014 - 22:12 Uhr

Keine Ahnung, ob du noch interessiert bist, dieser Youtube User macht gerade eine sehr ausführliche Reihe über WCF:

https://www.youtube.com/user/kudvenkat/playlists

Wie du siehst, hat der auch was über den Vorgänger, die ASP.NET Websites.

19.02.2014 - 22:53 Uhr

Ich hab's!!!
Ich rufe die FindResource Methode des Windows auf, die Resource habe ich aber im Grid definiert ...
Resource in Window gepackt. Jetzt geht es.

Danke aber an Coffebean, du hast mich auf den richtigen Weg gebracht !!!

19.02.2014 - 20:20 Uhr

Hier ist das Video.
ColorAnimation in SilverLight

Dein Code mit FindResource() wird kompiliert, wirft dann aber eine Resource Not Found Exception ...

19.02.2014 - 19:45 Uhr

Ich habe folgenden Code:


<Grid>
    <Button Margin="30" x:Name="btn" Click="btn_Click">
        <Button.Background>
            <SolidColorBrush x:Name="brush" Color="green"></SolidColorBrush>
        </Button.Background>
        <Button.Resources>
            <Storyboard x:Key="myStoryboard" x:Name="myStoryboard">
                <ColorAnimation 
                            BeginTime="0:0:0"
                            Duration="0:0:0.4"
                            From="Green"
                            To="Red"
                            Storyboard.TargetName="brush"
                            Storyboard.TargetProperty="Color"
                            >
                </ColorAnimation>
            </Storyboard>
        </Button.Resources>
    </Button>
</Grid>

In der btn_Click Methode will ich nun das Storyboard mit myStoryBoard.Begin() starten, aber die Code Behind Klasse kennt das StoryBoard überhaupt nicht, dabei mache ich es so, wie auf einem Internet Video gesehen.

Was ist da falsch?

12.01.2014 - 21:49 Uhr

Hallo, es geht um folgendes Video:

MVVM Session 03 - Model Validation with IDataErrorInfo

Und zwar bei 4:20, schreibt er folgende Property:


public string IDataErrorInfo.Error
{
   get
   {
       ....
    }
}

Ich erkenne wohl IDataErrorInfo als eine Schnittstelle und Error als Property, aber ich habe noch nie einen Datentypen als Property Namen gesehen ...

Was hat es damit auf sich?

21.05.2013 - 13:48 Uhr

Danke nochmal für die Antworten 😃

16.05.2013 - 21:51 Uhr

Ja, es liegt tatsächlich an der Helper Funktion.
Wobei sich mir nun nicht der Unterschied erschließt und das Model wie folgt aussieht, also Farbe durchaus enthält:


public class Verein
    {
        public string Name { get; set; }
        public string Farbe { get; set; }
        [Required(ErrorMessage="You must apply a value")]
        public int Gruendung { get; set; }
    }

Die Idee ist halt, dass ich eine Editier View bekomme, wo die Felder mit den aktuellen Werten vorausgefüllt werden, wofür ja diese ...For Funktionen sind, aber auch, dass eine SelectBox für die Farbauswahl mit dem aktuellen Wert als Voreinstellung.

16.05.2013 - 20:38 Uhr

Habe das 1:1 mit copy and paste kopiert. Bei mir zeigt es weiterhin black an ...
Verstehe das nicht ...

16.05.2013 - 20:08 Uhr

Habe es gerade mal probiert.
Er zeigt trotzdem black (das erste Element) an.

Das war also NICHT der Fehler ...

16.05.2013 - 18:51 Uhr

ich habe folgenden Code:


private SelectList getFarben()
{
    List<Object> colours = new List<Object>(){
        new {value="1", text="black"},
        new {value="2", text="white"},
        new {value="3", text="blue"}
    };
            
    return new SelectList(colours, "value", "text", "white");
}

ViewBag.colours = getFarben();

sowie in der View:


@Html.DropDownListFor(model => model.Farbe, (SelectList)ViewBag.colours)

Das Ganze klappt auch soweit, außer, dass der vorbestimmte Wert ('white') nicht selektiert ist.
Aber laut MSDN und Intellisense von VS ist der vierte Wert des Konstruktors in dieser Überladung der 'selected value'.

Irgendjemand ne Ahnung, was hier schief läuft?

14.05.2013 - 19:45 Uhr

Grummel ...
Danke erst mal.
Ich werd' gleich zum Tier:

Erstens: System.Parameter mit dem Punkt dazwischen, dass habe ich Hornochse einfach nur falsch abgelesen, aber leider sieht man sowas auch beim Nachschauen einfach nicht ...
beim Content Binding hat sich das = durch die 'Intellisense' reingemogelt. Ich selber habe das NIE getippt, weshalb ich es ebenfalls übersehen habe.

Meinetwegen kann der Admin diesen Thread gerne löschen, in meinen Augen jedenfalls ist er jetzt überflüssig ... 😉

14.05.2013 - 18:20 Uhr

Ich habe folgendes Beispiel aus dem Buch Visual C# 2008 Kompendium, S. 758


<Window x:Class="WpfApplication5.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Button 
            Height="{x:Static System.Parameters.IconHeight}"
            Width="{x:Static System.Parameters.IconWidth}"
            Content="{Binding Path=Height, RelativeSource={RelativeSource Self=}}"
            />
    </Grid>
</Window>

Ich bekomme nun für die ersten beiden Markuperweiterungen die Meldung, dass 'dervgeschachtelte Parameter System Parameters nicht unterstützt wird',
bei Content bekomme ich ne Fehlermeldung, dass 'Relative Source nicht in eine Zeichenkette verwandelt wird'
(oder so ähnlich)

Allerdings benutze ich VS Express Desktop 2012. Liegt es daran, dass sich da im Hintergrund einiges geändert hat?
Sorry, aber wenn das in einem Lehrbuch steht, erwarte ich ja mal eigentlich, dass es richtig ist ...
Was also ist hier falsch? Irgendjemand ne Idee?

09.05.2013 - 15:33 Uhr

So, habe das jetzt wie folgt gemacht:


private void btn1_Click(object sender, RoutedEventArgs e)
{
    btn1.Name = "btn1";
    this.RegisterName(btn1.Name, btn1);

    DoubleAnimation daW = new DoubleAnimation();
    DoubleAnimation daH = new DoubleAnimation();

    daW.To = 150;
    daW.Duration = new Duration(TimeSpan.FromSeconds(1));
    daW.AutoReverse = true;

    daH.To = 40;
    daH.Duration = new Duration(TimeSpan.FromSeconds(1));
    daH.AutoReverse = true;

    Storyboard myStoryboard = new Storyboard();
    myStoryboard.Children.Add(daW);
    myStoryboard.Children.Add(daH);

    Storyboard.SetTargetName(daW, "btn1");
    Storyboard.SetTargetProperty(daW, new PropertyPath(Button.ActualWidthProperty));
    Storyboard.SetTargetName(daH, "btn1");
    Storyboard.SetTargetProperty(daH, new PropertyPath(Button.ActualHeightProperty));

    myStoryboard.Begin(this);           
}

XAML:


<Window x:Class="WpfApplication2.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <StackPanel HorizontalAlignment="Left" Margin="20">
        <Button x:Name="btn1" Content="Button" HorizontalAlignment="Left"  VerticalAlignment="Top" Width="75" Height="20" Click="btn1_Click"/>
    </StackPanel>
</Window>

07.05.2013 - 22:33 Uhr

werde ich mir in einer ruhigen Minute mal anschauen.

Danke schon mal 😃

07.05.2013 - 18:31 Uhr

Hallo 😃

ich habe es wie folgt versucht:


private void btn1_Click(object sender, RoutedEventArgs e)
{
    DoubleAnimation da = new DoubleAnimation();
    DoubleAnimation da2 = new DoubleAnimation();

    da.To = btn1.ActualWidth * 2;
    da.Duration = new Duration(TimeSpan.FromSeconds(1));
    da.AutoReverse = true;

    da2.To = btn1.ActualHeight * 2;
    da2.Duration = new Duration(TimeSpan.FromSeconds(1));
    da2.AutoReverse = true;

    btn1.BeginAnimation(Button.WidthProperty, da);
    btn1.BeginAnimation(Button.HeightProperty, da2);
}

Das Problem ist, dass er nach dem Einbau der zweiten Animation (da2) eine Exception wirft.

Wie mache ich es statt dessen richtig, dass ich ein Rechteck (Button) auf doppelte Größe animiere? Immerhin brauche ich ja zwei verschiedene Animationsbereiche bei einem Rechteck (solange es sich NICHT um ein Quadrat handelt)

16.04.2013 - 19:14 Uhr

In XAML habe ich letztens folgendes gesehen:
Statt <Window x:class ...

fing die Datei mit '<View ' an.

Meine Frage jetzt dazu: Was ist der Unterschied zu Window, und wie kann ich die View anzeigen?

Ich habe im Netz leider nichts dazu gefunden, außer Ergebnisse zum Thema MVVM, aber das ist ja was anderes ...

14.03.2013 - 17:10 Uhr

Danke für die Antworten. Jetzt weiß ich Bescheid 😃

14.03.2013 - 16:41 Uhr

Ich poste das mal bewusst hier in der Smalltalk Ecke, da ich dafür nicht das eigentliche Forum missbrauchen will.

Folgendes: Hier (Using CryptoStream in C#) steht folgendes:


Student student = new Student();
student.StudentName = "Student1";

using (SchoolDBEntities ctx = new SchoolDBEntities())
{
      ctx.Students.AddObject(student);
      ctx.SaveChanges();
}

Ich kenne allerdings nur die Add() Funktion und laut VS und MSDN gibt es auch nur die Add Funktion.

Jetzt ist das Tutorial aber schon etwas älter (ich glaube Version 3.x). Kann es sein, dass die Funktion zwischenzeitlich umbenannt wurde, oder wieso steht da AddObject()?

12.03.2013 - 16:15 Uhr

verwendetes Datenbanksystem: SQL Express 2012

Ich verwende eine deutsche Version von VisualStudio Express Desktop 2012 und mache gerade folgendes Beispiel

http://www.entityframeworktutorial.net/model-first-with-entity-framework.aspx#.UT87fda9Qqc

Die Entity heißt 'Student'. Nun würde mir ne englische Version daraus ne Tabelle namens 'Students' anlegen.
Die deutsche Version allerdings 'StudentSatz' ...

Gibt es ne Möglichkeit VisualStudio so einzustellen, dass die deutsche Version beim Erstellen von Modellen Englische Konventionen benutzt?

Wahrscheinlich nicht, oder ?