2017-06-24 1 views
1

Ich habe diesen einfachen TextBlock- auf meiner Seite:UWP - Bewerben Sie benutzerdefinierten Konverter Wert von x: Uid Richtlinie

<TextBlock x:Uid="SettingsPage_StreamQualityTextBlock" 
      Style="{StaticResource SectionTitleStyle}"/> 

Text Wert von Ressourcendatei durch die x:Uid Richtlinie festgelegt ist.

Die Sache ist ich einen benutzerdefinierten Konverter zum Text Wert von TextBlock durch StaticResource anwenden möchten, aber wenn ich es tun wie dieses

Text="{Binding Converter={StaticResource TextToUpperCase}}" 

Wert nicht gesetzt ist und Wandler angelegt wird nicht.

Daher meine Frage ist:

dies hinter Teil irgendwie möglich ist, ohne programmatische Änderung von Code in XAML zu tun?

Vielen Dank für jede Hilfe im Voraus!

Antwort

1

Wie wäre es mit einer einfachen angehängten Eigenschaft, die Änderungen an der Eigenschaft der TextBlock überwacht?

public static class Helper 
{ 
    public static bool GetUseUpperCase(DependencyObject obj) 
    { 
     return (bool)obj.GetValue(UseUpperCaseProperty); 
    } 
    public static void SetUseUpperCase(DependencyObject obj, bool value) 
    { 
     obj.SetValue(UseUpperCaseProperty, value); 
    } 
    public static readonly DependencyProperty UseUpperCaseProperty = 
     DependencyProperty.RegisterAttached("UseUpperCase", typeof(bool), typeof(TextBlock), new PropertyMetadata(false, (sender, args) => 
     { 
      var textBlock = (TextBlock)sender; 
      textBlock.RegisterPropertyChangedCallback(TextBlock.TextProperty, (s, e) => 
      { 
       textBlock.Text = textBlock.Text.ToUpper(); 
      }); 
     })); 
} 

Dann legen Sie es nur zu Ihrem TextBlock aktivierungs werden muss.

<TextBlock x:Uid="SettingsPage_StreamQualityTextBlock" 
      Style="{StaticResource SectionTitleStyle}" 
      local:Helper.UseUpperCase="True" /> 
+1

das hat wie ein Charme funktioniert, vielen Dank! –

0

Wie lautet der Name des Wertes, den Sie zu diesem Textblock sind vorbei, Daten sind zu raten, ist in einer Art von Modell oder Klasse. Identifizieren Sie die genauen Eigenschaftsnamen Sie versuchen, es in der TextBinding Erklärung zu binden und zu schließen, wie diese

Text="{Binding [propertyName],Converter={StaticResource TextToUpperCase}}" 

ersetzen Eigenschaftsnamen oben in geschachtelte Klammern mit dem Eigenschaftsnamen Sie sind verbindlich. Denken Sie daran, die Box-Klammern zu entfernen.

Hoffe, das hilft.

+0

Das ist das Problem, es ist nicht in einem Modell oder einer Klasse, es ist nur eine Bezeichnung, die Text an lokalisierte Ressource-Datei gebunden ist und Wert selbst wird durch 'x: Uid'-Direktive festgelegt. –

Verwandte Themen