Laden...

Wie kann ich einen Style in XAML erstellen?

Erstellt von marlem vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.774 Views
M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren
Wie kann ich einen Style in XAML erstellen?

Hallo,

ich habe gelernt, dass man in XAML Styles erstellen kann.
Kann ich diesen C#-Code:


private void TextBox_GotFocus(Object sender, EventArgs e)

      {

          if (ChkBarrierefrei.IsChecked.Value == true)

          {

              (sender as TextBox).Background = AKTIVES_ELEMENT_CONTRAST;

          }

      }


Auch als XAML Style erstellen?
Wenn ja, Codebeispiel wäre super.

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

16.835 Beiträge seit 2008
vor 5 Jahren

Mit Triggern.
Trigger, DataTrigger & EventTrigger bzw Introduction to WPF styles im Allgemeinen.

Darüber Hinaus sollte man in WPF den MVVM Pattern verwenden. Dieser vereinfacht vieles und macht vieles zudem erst möglich.

5.658 Beiträge seit 2006
vor 5 Jahren

Codebeispiele und Beispiel-Projekt gibt es auch hier dazu: [Artikel] MVVM und DataBinding

Weeks of programming can save you hours of planning

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Vielen Dank Ihr beiden!

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

so, bin jetzt beim Thema Trigger


 <Trigger Property="IsMouseOver" Value="true">
                    
                </Trigger>

wo finde ich einen Überblick welche gültigen Werte es gibt für die Trigger Property ?

Ich möchte Trigger erstellen:
Wenn ein Bedienelement den Fokus hat
Wenn ein Bedienelement den Fokus verliert

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

16.835 Beiträge seit 2008
vor 5 Jahren

Die Properties ergeben sich aus dem Typ des Objekts, auf das den Trigger wirkt.
Wenn das eben ein eine TextBox ist, die von UIElement erbt, dann hat die ein Property IsMouseOver
Diese kann man einfach aus der Doku nehmen: WPF UIElement Class

Steht aber in der Doku der Trigger Erklärung;-)

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

okay, vielen Dank!

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Wie kann ich in XAML einem Element 2 Styles zu weisen?


  <TextBox Name="edtSuchen" [B]Style="{StaticResource EdtSuchen/ErsetzenStyle}[/B]" ToolTip="Bitte Suchbegriff eingeben. Suche Starten mit der Enter-Taste" KeyDown="edtSuchen_KeyPress" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" TabIndex="3"/>

Ich habe jetzt hier Fettgedruckten Style definiert und möchte jetzt noch diesen Style


<Style x:Key="[B]TextboxAktiv[/B]" TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="true">
                    <Setter Property="Background" Value="Yellow"/>
                </Trigger>
            </Style.Triggers>
        </Style>

zuweisen. wie schreibt man das?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

5.658 Beiträge seit 2006
vor 5 Jahren

Das geht nicht.

Du kannst aber Styles miteinander kombinieren, indem du BasedOn verwendest, oder einen Standard-Style für ein Control erstellst (mit TargetType), und dann einen zusätzlichen Style zuweist. Du kannst auch für jede Hierarchie-Ebene im XAML unterschiedliche Styles festlegen, also z.B. einen in den App-Resourcen für die gesamte Anwendung, und dann eine in den Windows-Resourcen pro Fenster, dann pro Layout-Element usw.

Schau dir ruhig auch mal an, wie das in den diversen Themes bzw. Style-Bibliotheken wie Material oder Metro gelöst ist.

Weeks of programming can save you hours of planning

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

@MrSparkle
okay, Danke!

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

uff, dieses WPF ist zum lernen sehr komplex!

Ich habe folgendes Problem:
Dieses hier ist mein Standardstyle für die Textboxen Suchen und Ersetzen:


 <Style x:Key="EdtSuchen/ErsetzenStyle" TargetType="TextBox">
            <Setter Property="Background" Value="White"/>
            <Setter Property="Width" Value="150"/>
            <Setter Property="BorderThickness" Value="1"/>
            <Setter Property="BorderBrush" Value="Black"/>
        </Style>

Wenn eine der beiden Textboxen den Fokus hat, sprich aktiv ist soll dieser Style angewendet werden:


 <Style x:Key="TextboxAktiv" TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="true">
                    <Setter Property="Background" Value="Yellow"/>
                </Trigger>
            </Style.Triggers>
        </Style>

wie löst das der erfahrene WPF/XAML-Profi?

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

16.835 Beiträge seit 2008
vor 5 Jahren

Ich bin an der Stelle auch raus, weil ich kein WPF Profi bin.

Schau Dir doch mal nen Tutorial an - und wie andere Bibliotheken das machen; zB auf GitHub.
Ansonsten stehst Du jetzt vor jeder Zeile Code im Forum und fragst nach; das bremst ja Dich auch aus 😉

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Hallo Abt,

eigentlich wollte ich mich nie in einem Forum registrieren nur um WPF zu lernen!
Ich habe mir das Buch von Thomas Claudius Huber gekauft, das hat über 1000 Seiten und ich war mir sicher, dass ich mit diesem Buch ALLE Probleme lösen werde, die beim entwickeln meines barrierefreien WPF Texteditor haben werde.
Das war ein schwerer Irrtum! Das Buch hat mir bei noch überhaupt keinem Problem geholfen.

Dann habe ich noch ein Lernvideo von Video2Brain über WPF. Das ist wesentlich besser wie das Buch, hilft aber auch noch immer.

Dann habe ich mir noch ein Cookbook gekauft über WPF, das hilft mir bei diesem Problem auch nicht weiter.

was ich damit sagen möchte ist, wenn ich hier fragen stelle, dann nur deshalb, weil ich sonst für meine Probleme nirgendwo Lösungen finde und ich wollte den Texteditor bis zur ersten September Woche fertig haben.

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

187 Beiträge seit 2009
vor 5 Jahren

Du kannst das mit einem StyleSelector machen.
Hier gibt es ein Beispiel für einen Button.

5.658 Beiträge seit 2006
vor 5 Jahren

Normalerweise würde man den Focused-Trigger in den Textbox-Style integrieren, und keinen eigenen Style dafür verwenden.

Der Trigger macht ja schon genau das, was du mit dem StyleSelector erreichen willst.

Weeks of programming can save you hours of planning

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

@Caveman
Danke

@MrSparkle
Kannst Du bitte anhand von dieser XAML-Zeile ein Beispiel machen:


   <TextBox Name="edtSuchen" Style="{StaticResource EdtSuchen/ErsetzenStyle}" ToolTip="Bitte Suchbegriff eingeben. Suche Starten mit der Enter-Taste" KeyDown="edtSuchen_KeyPress" GotFocus="TextBox_GotFocus" LostFocus="TextBox_LostFocus" TabIndex="3"/>

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java

M
marlem Themenstarter:in
68 Beiträge seit 2018
vor 5 Jahren

Ich habe es:


 <Style x:Key="TextboxAktiv" TargetType="TextBox">
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="true">
                    <Setter Property="Background" Value="Yellow"/>
                </Trigger>
            </Style.Triggers>
        </Style>

        <Style x:Key="ComboboxAktiv" TargetType="ComboBox">
            <Style.Triggers>
                <Trigger Property="IsFocused" Value="true">
                    <Setter Property="Background" Value="Yellow"/>
                </Trigger>
            </Style.Triggers>
        </Style>


<ComboBox  x:Name="ComboboxFontname" Style="{StaticResource ComboboxAktiv}" ToolTip="Auswahlliste um Schriftart festzulegen" SelectedIndex="0" Width="200"  TabIndex="1"  />
                    <ComboBox  x:Name="ComboboxFontsize" Style="{StaticResource ComboboxAktiv}" ToolTip="Auswahlliste um Schriftgröße festzulegen" SelectedIndex="0" Width="45" TabIndex="2">
                    
<TextBox Name="edtSuchen" BorderThickness="1" BorderBrush="Black" Width="150" Style="{StaticResource TextboxAktiv}" ToolTip="Bitte Suchbegriff eingeben. Suche Starten mit der Enter-Taste" KeyDown="edtSuchen_KeyPress" TabIndex="3"/>
<TextBox Name="edtErsetzen"  BorderThickness="1" BorderBrush="Black" Width="150" Style="{StaticResource TextboxAktiv}" ToolTip="Bitte Begriff eingeben, durch den der Suchbegriff ersetzt werden soll. Ersetzen Starten mit der Enter-Taste" KeyDown="edtErsetzen_KeyPress" TabIndex="4"/>

Ist noch nicht perfekt, aber es zeigt, dass es auch ohne C#-Code geht, DANKE!!!

barrierefreies Webdesign, barrierefreie Softwareentwicklung mit C#, barrierefreie Softwareentwicklung mit Java