2016-05-12 8 views
1

Ich habe versucht, die Proben, ähnlich denen, die Charles Petzold demonstriert in seiner speech, aber leider kann ich nicht bekommen die TextBlock- der Vordergrund Eigentum zu akzeptieren meine Gewohnheit MarkupExtension, die einfach gibt eine Farbe zu laufen:Warum akzeptiert die TextBlock.Foreground-Eigenschaft in XAML keine Farbe?

<Window x:Class="WpfApplication1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 

    <StackPanel > 
     <TextBlock Foreground="{local:MyConverter}" 
        Text="{Binding Source={x:Reference slider}, 
            Path=Value, 
            StringFormat='Rotation = {0:F2} degree'}"> 
     </TextBlock> 
     <Slider x:Name="slider" Minimum="-360" Maximum="360"></Slider> 
    </StackPanel> 
</Window> 

mit der folgenden einfach Markup-Erweiterung:

class MyConverter : MarkupExtension 
{ 
    public override object ProvideValue(IServiceProvider serviceProvider) 
    {    
     return System.Drawing.Color.Red; 
    } 
} 

Nach der Start der Anwendung ich ein XamlParseException mit einer inneren Ausnahme erhalten, die besagt: { "‚Farbe [Rot]‘ist keine gültige Wert für Eigenschaft ‚Vordergrund‘ "}

ich auch eine solide Bürste Rückkehr versucht habe. return new SolidBrush(Color.Red);, aber mit dem gleichen Effekt. Was mache ich falsch? Und wie kann ich meine Foreground-Eigenschaft dazu bringen, ein Color-Objekt als Wert zu akzeptieren? Brauche ich eine andere Umwandlung in eine Zeichenkette?

+1

Isn‘ t 'Vordergrund' vom Typ' System.Media.Brushes'? –

+0

weil es Bürsten –

Antwort

2
class MyConverter : MarkupExtension 
{ 
    public override object ProvideValue(IServiceProvider serviceProvider) 
    {    
     return System.Media.Brushes.Red; 
    } 
} 

Ich denke TextBlock.ForeGround vom Typ System.Media.Brushes die Farben ähnlich Basis enthält.

+0

verwendete ich den falschen Namensraum für Farbe und Pinsel 'System.Drawing' statt' System.Windows.Media'. –

1

Sie so etwas wie dieses

textBlock.Inlines.Add(new Run("Red") { Foreground = Brushes.Red }); 
0

Versuchen Sie, diese versuchen könnte .. ..

class MyConverter : MarkupExtension 
{ 
    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return new SolidColorBrush(Colors.Red); 
    } 
}