Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Briefkasten
Thema: WPF: Xaml Array problem
Am im Forum: GUI: WPF und XAML

[Edit] hoppla ich habe die antworten zu schnell überlesen winsharp hat das gleiche...
Hallo,

du greifst auf eine Resource zu.

Deshalb muss das Binding so aussehen:


<Window.Resources>
        <x:Array x:Key="StringArray" Type="{x:Type sys:String}">
            <sys:String>asedf</sys:String>
            <sys:String>asaasdfdf</sys:String>
            <sys:String>asaasadfdf</sys:String>
        </x:Array>

    </Window.Resources>
    <Window.Content>

            
            <ListBox ItemsSource="{Binding Source={StaticResource StringArray}}"></ListBox>...

Thema: Shareware in Setupprojekt oder in Ausführerdatei integrieren?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Section31
also ich würde die Eingabe eines Schlüssels bei der Installation weg lassen. Verwende lieber eine Lizenz-Datei. Ist keine vorhanden oder sind die Informationen ungültig, läuft das ganze im Demo-
...
Der Shareware-Schutz beruht nämlich einzig und allein auf der Verschlüsselung und die ist erschreckend einfach zu entfernen, wenn man sich ein wenig näher damit beschäftigt.

Hallo,

danke für den Hinweis, das ist mt deinem Ansatz wesentlich einfacher zu realisieren.

Ich erstelle eine .snk Datei welche meiner Lizenz-Datei entspricht. Ist diese nicht vorhanden, ist das Programm nur 60 Tage nutzbar.

So würd ich das machen. Nur bin ich mir nicht sicher ob das mit der .snk Datei eine gute Idee ist.

Thema: Shareware in Setupprojekt oder in Ausführerdatei integrieren?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich möchte das schon über den Installer regeln.

Momentan stelle ich mir das so vor. Ich erstelle einen Custom Dialog. Dieser enthält eine TextBox in den man den SerialKey eingeben kann und zwei Schaltflächen um im Setup vor oder zurück navigieren zu können.

Der Benutzer soll in der Lage sein, das Setup auch ohne Key abschließen zu können. Das ist eben im vorgefertigtem Dialog CustomerInformation nicht möglich. Dort kommt man nur weiter, wenn der Key passt.

Den Serial Key übergebe ich einer Custom Action (C# Dll). Dort werte ich aus, ob der Key gültig ist. Ist der Key ungültig (z.B. weil man keinen eingegeben hat), erstelle ich in der Registery eine Flag.

Beim Programm start wird der Registery Wert geladen. Aus diesem ermittle ich ob das Programm als Shareware oder Vollversion installiert wurde.

Bin ich richtig in der annahme, dass ich das nur über ein Custom Dialog und Custom Action lösen kann?

Hier noch ein Link wie ich das mit den CustomActions und C#dll machenw will http://www.simple-talk.com/dotnet/visual-studio/visual-studio-setup---projects-and-custom-actions/

Allgemeines:
http://openbook.galileocomputing.de/visualbasic_2008/vb2008_08_anwendungen_004.htm

Thema: Shareware in Setupprojekt oder in Ausführerdatei integrieren?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich hab ein fertiges Programm geschrieben. Nun möchte ich dem "Kunden" die Möglichkeit geben, das Programm vor dem Kauf zu testen.

Die Shareware Version soll der orginal Version des Programmes entsprechen.
Nach 30 Tagen läuft die Shareware Version ab und man soll das Programm nicht mehr starten können.

Ich hätte das so gemacht:

Das Projekt von der Ausführbaren Datei kopiert. Im Programm start, wird ein RegisteryKey erstellt falls dieser noch ncht vorhanden ist in dem das Datum gespeichert wird.

Ist der RegisteryKey vorhanden wird überprüft ob vom gespeichertem Datum 30 Tage schon vergangen sind.Falls nicht wird das Programm gestartet anderfalls wird das Programm beendet.

Allerdings ist das etwas umständlich das Ausführbare Datei Projet zu kopieren nur um die Überprüfung ein zu bauen.

Kann ich diese Überprüfung auf die 30 Tage nicht in mein Setup Projekt integriren und falls ja wie?
Oder gibts noch eine bessere Möglichkeit?

lg

Thema: Resourcen werden zur Laufzeit nicht gefunden...
Am im Forum: GUI: WPF und XAML

Hallo,

in deinem Projekt (vom Typ CustomControlLibary) gibt es einen Ordner der Resources heißt und in diesem sich die Shared.xaml Datei befindet?.

Projektname
+Resources
++Shared.xmal

Probier mal im C# Code die Resource zu laden und mit dem Debugger drüber zu steppen um mehr Informationen zu erhalten.

Eine andere Möglichkeit wäre, wenn du die Datei über die URI einbindest. Wäre zwar nicht notwendig aber eine alternative.

http://dotnet-gui.com/forums/p/520/2212.aspx

Den Key beim <ResourceDictionary x:Key="test"> würde ich weg lassen. Bringt eigentlich nix.

Thema: Image von Verknüpfung auslesen
Am im Forum: GUI: WPF und XAML

Die Icons für die Dateierweiterungen werden in der Registery gespeichert.

Eine Option wäre also, in der regedit einen entsprechenden Schlüssel zu setzen.
Siehe auch:

Eigenes Dateiformat einrichten

Thema: Binding an sich selbst
Am im Forum: GUI: WPF und XAML

Hallo,

wie michgl geschrieben hat (bzw. was auch die Fehlermeldung sagt), kann man beim ConverterParameter kein Binding setzen.

Am einfachsten kannst du dieses Problem lösen, wenn du ein Converter schreibst der von IMultiValueConverter (hab das Interface aus dem Kopf) abgeleitet ist.

Beim MultiBinding gibts du dann, dass was du eigentlich im ConverterParameter schreiben wolltest, mit an.

Beispiel siehe hier.

Thema: Globale Ressourcen werden nicht gefunden
Am im Forum: GUI: WPF und XAML

Ich verzichte auf diesen "Key" komplett. Dann hat man auch erst gar keine Probleme wie du sie schilderst.

Du brauchst zu den ganzen Converter eine Hilfklasse.

Die Hilfsklasse besitzt nur statische Member. Pro Member setzt du als Typ einen Converter. Das sieht dann so aus:


//Hilfsklasse
public static class ConverterList
    {
        public static StringToStringConverter StringToStringConverter = new StringToStringConverter();
        //todo pro converter ein statisches member erstellen welches den typ des converters besitzt
    }
    #region converter

    //todo hier alle converter einfügen

    public class StringToStringConverter : IValueConverter
    {
        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null) return string.Empty;
            if (!value.GetType().Equals(typeof(string))) return string.Empty;
            if (parameter == null) return value;

            return value.ToString() + string.Empty + parameter;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null) return string.Empty;
            if (!value.GetType().Equals(typeof(string))) return string.Empty;
            if (parameter == null) return value;

            if (!value.ToString().EndsWith(parameter.ToString())) return value;

            if (value.ToString().Length < 0) return value;

            return value.ToString().Remove(value.ToString().Length - 1, 1);

        }

        #endregion
    }
    #endregion

Und im XAML so:
 <TextBlock Text="{Binding Path=wert,Converter={x:Static local:ConverterList.StringToStringConverter},ConverterParameter='zweiterstring'}"></TextBlock>

Mehr brauchst du nicht um auf den Converter zugreifen zu können.

Mehr dazu kannst du auch hier nachlesen:

http://archiv.get-the-solution.net/index-blog-1-14-50-Einfacher-zugriff-auf-Converter-in-XAML-ermöglichen

PS: Falls du das aber wirklich über einen Key machen willst, probier diesen in ein ResourceDictionary zu legen. Das ResourceDictionary bindest du dann in der APP.xaml ein. Das sollte funktionieren.

Thema: Icon aus PNG-Datei erzeugen, welche in Resourcen liegt
Am im Forum: GUI: WPF und XAML

Warum setzt du das Icon nicht im XAML? Ist es dringend notwendig dies über den CodeBehind zu machen?

Oder liegt das daran, dass du nur über den CodeBehind an das Bild kommst, weil das als eingebettete Resource gespeichert ist.

Falls ja, dürften dieser Link für dich interessant sein:

http://get-the-solution.net/2009/09/02/markupextension-bilder-aus-resource-direkt-ins-xaml-laden/

Andernfalls kannst du das png so als icon abspeichern:

http://dotnet-snippets.de/dns/bitmap-in-icon-konvertieren-SID538.aspx

Thema: Tatsächlich gebundenes Element ungleich DataContext
Am im Forum: GUI: WPF und XAML

Hallo,

ich glaube du solltest einen anderen Weg einschlagen.

Den DataContext solltest du während der Laufzeit nicht ändern müssen.

Außerdem kostet das setzen des DataContext bei größeren Objekten viel performance.

Du solltest folgende Schicht haben

View - ViewModel - WCF

Sprich, auf die Property auf die du bindest, sollte immer den aktuellen Wert des WCF Service zurück geben.

Dann must du auch nicht den DataContext neu setzen.

Thema: ItemsSource mit zwei Quellen?
Am im Forum: GUI: WPF und XAML

Hallo,

es gibt nur

ObservableCollection<T>

ObservableCollection<T,T>

gibt es nicht.

Dafür must du dir entweder eine eigene Klasse schreiben oder wie gesagt ein Objekt mit den 2 Properties erstellen.

Thema: ItemsSource mit zwei Quellen?
Am im Forum: GUI: WPF und XAML

Am einfachsten wäre es natürlich wenn du aus den zwei ObservableCollections eine machst.

Vereinfach dargestellt:

Also aus dem hier:


        public class PfadObjekt
        {
            public string Pfad { get; set; }
        }
        public class EinanderesObjekt
        {
            public object EinAnderesObjekt { get; set; }
        }
        public ObservableCollection<PfadObjekt> PfadList { get; set; }
        public ObservableCollection<PfadObjekt> EinanderesObjekt { get; set; }

eine neue passende Klasse erstellst, die die zwei benötigten Properties beinhaltet. Dazu schreibst du noch eine Funktion die aus den 2Listen eine neue macht.

        public class EinandresOjektMitPfad
        {
            public string Pfad { get; set; }
            public object EinAnderesObjekt { get; set; }
            public static EinandresOjektMitPfad Convert(ObservableCollection<PfadObjekt> pPfadObjektList, ObservableCollection<EinanderesObjekt> pEinanderesObjekt)
            {
                EinandresOjektMitPfad einandresOjektMitPfad = new EinandresOjektMitPfad();
                //todo aus den zwei listen eine EinandresOjektMitPfadList machen
                return einandresOjektMitPfad;
            }
        }

So etwas in der Art.

Dann kannst du ganz einfach die neu erstellte liste der ListBox oder ListView übergeben.

Thema: ItemsSource mit zwei Quellen?
Am im Forum: GUI: WPF und XAML

Hallo,

du meinst ein Objekt d. z.b so aussieht

public ZweiListen
{
public IEnumerable listeeins {get;set;}
public IEnumerable listezwei {get;set;}
}

Falls ja.

Klar kannst du eine eigene ItemsSource erstellen die so aussieht. Wenn du aber so ein Objekt einer ListBox / ListView übergeben willst geht das nicht.

Den die Propertie ItemsSource vom ItemsControl (ListBox und ListView sind von diesem abgeleitet) haben als Typ IEnumerable implementiert. D.h. du kannst nur Listen, Array bzw. alle die dieses Interface implementieren übergeben.

Erstell doch einfach 2 seperate ListBoxen die nebeneinander sind.?

Thema: Mit Reflection rausfinden, in welchem Property sich aufgerufene Methode befindet
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Hi,

wenn auch spät. Ich hab es jetzt mittels einer Extension gelöst.

        public static string GetMemberName(Expression<Func<TEntity, TProperty>> projection)
        {
            return ((MemberExpression)projection.Body).Member.Name;
        }

//Der geposted Code ist nicht die Extension nur wie die Extension Codemäßig aussieht.

Thema: DataTrigger, aber wie?
Am im Forum: GUI: WPF und XAML

Zitat von Felsen
OK, habs übernommen, und es lässt sich nun auch ohne Fehlermeldung kompilieren. Danke schonmal dafür. Trotzdem versteh ich nicht ganz wieso man da ein extra Style Objekt benötigt. Für was existiert dann überhaupt die Trigger Property auf dem Border Element?

Für Animationen.

Z.B.:
            <Button Content="s">
                <Button.Triggers>
                    <EventTrigger RoutedEvent="Button.MouseEnter">
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.Width)" Duration="0:0:1">
                                    <DiscreteDoubleKeyFrame Value="50"  KeyTime="0:0:1" />
                                </DoubleAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                    <EventTrigger RoutedEvent="Button.MouseLeave">
                        <BeginStoryboard>
                            <Storyboard>
                                <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(Button.Width)" Duration="0:0:1">
                                    <DiscreteDoubleKeyFrame Value="100"  KeyTime="0:0:1" />
                                </DoubleAnimationUsingKeyFrames>
                            </Storyboard>
                        </BeginStoryboard>
                    </EventTrigger>
                </Button.Triggers>
            </Button>

Das würde in etwa auch auf Punkt 2 zu treffen. Du must es allerdings anpassen.
Zitat
Und was hat es mit dem Storyboard auf sich? Gibt es dort keine einfachen Setter Objekte?

Wenn man z.B. die Width vom Button setzen will, benötigt man einen Double Wert.
Im Storyboard gibts dafür das Objekt DoubleAnimationUsingKeyFrames.

Für einen string dagegen nimmt man StringAnimationUsingKeyFrames usw. usf.

Thema: SQL Server Exrepss 2008 auf SP1 aktualisieren
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Anscheinend gibts es für die SQL Express 2008 Server kein SP1. Stattdessen kann man das SP1 der vollen Version verwenden.

greets

Thema: SQL Server Exrepss 2008 auf SP1 aktualisieren
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo,

ich habe den SQL Server Exrepss 2008 installiert. Nun möchte ich den SP1 installieren. Im SP1 Menü gibts aber nur die Option Neue eigenständige SQL Server Installation hinzufügen oder Features hinzufügen. Wenn ich die installation starte, kann ich also nur eine neue SQL Instanz hinzufügen oder ein neues Feature aktivieren.

Ich möchte aber meinen vorhandenen SQL Server auf SP1 updaten. Geht das nicht?

Thema: Kompliziertes Template Problem
Am im Forum: GUI: WPF und XAML

Hallo,

Zitat von Felsen
Das glaub ich jetzt nicht...
Wenn ich der Property tatsächlich { get; set; } anfüge funktionierts ... Aber ich verstehe nicht wieso.


Erst in dem Moment als du das {get;set;} hinzugefügt hast, handelt es sich um eine Propertie / Eigenschaft.

Davor war es eine Membervariable.
Zitat von Felsen
Die Zuweisung funktioniert doch in beiden fällen Identisch, es wird letztenendes nur auf eine Membervariable zugegriffen. Dass es für XAML da einen Unterschied gibt hätte ich nie gedacht...


Beim Binding wird immer auf die Propertie zugegriffen. Die Propertie speichert oder gibt den Wert der Membervariable zurück (solang es sich um eine stink normale Propertie handelt).

Wenn du auf eine Membervariable zugreifen willst must du das so machen:


public static string name="asdf";

<TextBlock Text="{Binding Source={x:Static local:Window1.name}}"></TextBlock>

In deinem Fall ist aber die Propertie genau richtig.

Auf Statische Membervariablen zugreifen macht z.B. bei Converter sinn.

Informationen zum Binding findest du hier:

http://msdn.microsoft.com/de-de/library/ms752347.aspx

Thema: Kompliziertes Template Problem
Am im Forum: GUI: WPF und XAML

Hallo,

laut dem gepostetem Code hast du auch nach wie vor eine Membervariable und keine öffentliche Propertie.

Thema: Frage: Grid + ProgressBar + TextBlock
Am im Forum: GUI: WPF und XAML

@ % bzgl, Converter, 2 TextBlöcke...
Hallo,

eine weitere Möglichkeit wäre im Binding die Propertie StringFormat zu setzen.
http://blogs.msdn.com/llobo/archive/2008/05/19/wpf-3-5-sp1-feature-stringformat.aspx

lg

Thema: Kompliziertes Template Problem
Am im Forum: GUI: WPF und XAML

Hi,

eine DependecyPropertie benötigst du in diesem Fall nicht. Eine normale tut es auch.

public  ObservableCollection<Objekt> liste1 { get; set; }

Und nicht vergessen die Propertie im Konstruktor zu initialisieren.

Thema: Kompliziertes Template Problem
Am im Forum: GUI: WPF und XAML

Hallo,

mach aus der Membervariable liste1 eine Propertie. Dann sollte es gehen.

Ich nehm mal an dass Net() der Konstruktor der Klasse Klasse ist und den falschen Namen hat. So sollte es nicht compelierfähig sein.

Thema: WPF: Setzen der Farbe eines List-Eintrages (SolidColorBrush)
Am im Forum: GUI: WPF und XAML

Hallo,

da gibts mehrere möglichkeiten.

Entweder du definierst für das ListBoxItem ein Template:

<Setter Property="Template">

        <Setter.Value>

          <ControlTemplate TargetType="ListBoxItem">

            <Border 

           Name="Border"

           Padding="2"

           SnapsToDevicePixels="true">

              <ContentPresenter />

            </Border>

            <ControlTemplate.Triggers>

              <Trigger Property="IsSelected" Value="true">

                <Setter TargetName="Border" Property="Background"

                     Value="{StaticResource AuthorGradient}"/>

              </Trigger>

            </ControlTemplate.Triggers>

          </ControlTemplate>

        </Setter.Value>

      </Setter>


oder du überschreibst den SystemColors.HighlightBrushKey Key.

Bzw. siehe:

http://msdn.microsoft.com/de-de/library/system.drawing.systemcolors_members.aspx

und
http://www.wpftutorial.net/ListBoxSelectionBackground.html
Beispiel:

<Style TargetType="{x:Type ListBoxItem}">
    <Style.Resources>
        <!-- Background of selected item when focussed -->
        <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Red" />                
        <!-- Background of selected item when not focussed -->
        <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Green" />
    </Style.Resources>
</Style>

Thema: Existiert C# "eval" Methode?
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Die Recheneingaben könntest du mit Regex einlesen.

Ich hatte irgendwo noch so eine mathe lib rum liegen finde sie aber atm nicht. *Such*

Thema: MVVM: Regions / RegionManager
Am im Forum: GUI: WPF und XAML

Hallo,

schau dir mal folgende links an:

http://msdn.microsoft.com/de-de/magazine/cc785479.aspx
http://www.tanguay.info/web/index.php?pg=howtos&id=15

Thema: Controls per Button Click deaktivieren
Am im Forum: GUI: WPF und XAML

Der Code sieht nicht viel anders aus.

Edit: Hm da war ich wohl zu voreilig. Mal sehen, was man bei der TextBox genau beachten muss, damit das funktioniert.

Dieser thread dürfte ebenfalls interessant sein

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/33590029-d019-46d2-b929-b09e61f588c7

Thema: Controls per Button Click deaktivieren
Am im Forum: GUI: WPF und XAML

hi sowas in der art?

<Button>
                <Button.Triggers>
                    <EventTrigger RoutedEvent="Button.Click">
                        <EventTrigger.Actions>
                            <BeginStoryboard>
                                <Storyboard TargetProperty="IsEnabled">
                                    <BooleanAnimationUsingKeyFrames Duration="0:0:0.001">
                                        <DiscreteBooleanKeyFrame Value="True"></DiscreteBooleanKeyFrame>
                                    </BooleanAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                            <BeginStoryboard>
                                <Storyboard TargetProperty="Width">
                                    <DoubleAnimationUsingKeyFrames Duration="0:0:0.001">
                                        <DiscreteDoubleKeyFrame Value="20"></DiscreteDoubleKeyFrame>
                                    </DoubleAnimationUsingKeyFrames>
                                </Storyboard>
                            </BeginStoryboard>
                        </EventTrigger.Actions>

                    </EventTrigger>
                </Button.Triggers>
            </Button>

Thema: WPF Composite Application Libraray
Am im Forum: GUI: WPF und XAML

Hallo,

ich verwende die lib u.a. wegen den DelegateCommands und dem RegionManager. http://msdn.microsoft.com/de-de/magazine/cc785479.aspx

Die lib wird auf der msdn Seite angepreist bzgl. der stabilität must du dir keine Gedanken machen.

Thema: Intelligentes PropertySet
Am im Forum: Basistechnologien und allgemeine .NET-Klassen

Ich finde die implementierung über Extenions schöner.

http://www.lieser-online.de/blog/?p=130

http://www.lieser-online.de/blog/?p=131

Thema: dynam. Controls einblenden neben vorhandenen Controls.
Am im Forum: GUI: WPF und XAML

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>