Nur komischerweise funktioniert das INotifyDataErrorInfo aber auch, ohne dass ich das ErrorChanged Event auslöse ...
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?
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?
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.
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?
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?
Ok, das habe ich verstanden, aber was meinst du mit Vorgängerklasse? Meinst du damit die Mutterklasse, von der FlipPanel abgeleitet ist?
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?
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.
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?
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.
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 ... 😭
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 ...
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>
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 ... 😭
Werde wohl auch den bequemeren 2. Weg gehen.
Danke dir 😃
<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?
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 🙂
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
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.
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.
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)
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 😃
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.IQueryable
1[LinkTest.Product], System.Linq.Expressions.Expression1[System.Func
2[LinkTest.Product,System.Boolean]])' nicht, und diese Methode kann nicht in einen Speicherausdruck übersetzt werden.
Macht eh kein Sinn, hatte ja ganz vergessen, dass ne Ellipse keine Koordinaten hat, sondern diese in der Canvas gespeichert werden ...
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?
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?
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 😃
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 ...
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
Was fehlt sind MVVM und Command Binding, aber das findet man in anderen Tutorials.
Video-Playlist: WPF Complete Tutorials ( Windows Presentation Foundation )
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.
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 !!!
Hier ist das Video.
ColorAnimation in SilverLight
Dein Code mit FindResource() wird kompiliert, wirft dann aber eine Resource Not Found Exception ...
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?
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?
Danke nochmal für die Antworten 😃
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.
Habe das 1:1 mit copy and paste kopiert. Bei mir zeigt es weiterhin black an ...
Verstehe das nicht ...
Habe es gerade mal probiert.
Er zeigt trotzdem black (das erste Element) an.
Das war also NICHT der Fehler ...
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?
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 ... 😉
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?
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>
werde ich mir in einer ruhigen Minute mal anschauen.
Danke schon mal 😃
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)
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 ...
Danke für die Antworten. Jetzt weiß ich Bescheid 😃
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()?
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 ?