2010-11-03 45 views
1

我有一个文本框供用户输入6个字符的十六进制颜色值,一个验证器&转换器附加到它。到此为止,一切正常。但我想将文本框的颜色与文本框中指定的颜色绑定(ElementName s Background & Foreground),并且它似乎不起作用。如何绑定到文本框背景颜色

当我调试通过代码/步,值似乎总是""

XAML

<TextBox x:Name="Background" Canvas.Left="328" Canvas.Top="33" Height="23" Width="60"> 
    <TextBox.Text> 
     <Binding Path="Background"> 
      <Binding.ValidationRules> 
       <validators:ColorValidator Property="Background" /> 
      </Binding.ValidationRules> 
      <Binding.Converter> 
       <converters:ColorConverter /> 
      </Binding.Converter> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 
<TextBlock Canvas.Left="403" Canvas.Top="12" Text="Foreground" /> 
<TextBox x:Name="Foreground" Canvas.Left="403" Canvas.Top="33" Height="23" Width="60"> 
    <TextBox.Text> 
     <Binding Path="Foreground"> 
      <Binding.ValidationRules> 
       <validators:ColorValidator Property="Foreground" /> 
      </Binding.ValidationRules> 
      <Binding.Converter> 
       <converters:ColorConverter /> 
      </Binding.Converter> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

<!-- in this example I used the converter used in the TextBox & another converter that converts a string to color --> 
<TextBox ... 
    Background="{Binding ElementName=Background, Path=Text, Converter={StaticResource colorConverter}}" 
    Foreground="{Binding ElementName=Foreground, Path=Text, Converter={StaticResource stringToColorConverter}}" /> 

转换器

class ColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     try 
     { 
      string entry = ((Color)value).ToString(); 
      return entry.Substring(3); 
     } catch (Exception) { 
      return Binding.DoNothing; 
     } 

    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string entry = (string)value; 
     Validators.ColorValidator validator = new Validators.ColorValidator(); 
     if (!validator.Validate(entry, System.Globalization.CultureInfo.CurrentCulture).IsValid) { 
      return Binding.DoNothing; 
     } 
     return (Color)System.Windows.Media.ColorConverter.ConvertFromString("#FF" + entry); 
    } 
} 

class StringToColorConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     string entry = (string)value; 
     Validators.ColorValidator validator = new Validators.ColorValidator(); 
     if (!validator.Validate(entry, System.Globalization.CultureInfo.CurrentCulture).IsValid) 
     { 
      return Binding.DoNothing; 
     } 
     return (Color)System.Windows.Media.ColorConverter.ConvertFromString("#FF" + entry); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 
+1

我不确定,因此一个评论,但也许问题是,TextBox.Background等都需要一个画笔,而不是一个颜色。 – Jens 2010-11-03 13:19:32

+0

一个更好的标题肯定会有助于收集适当的关注。 – dhill 2010-11-03 13:19:50

+0

正如Jens所说,尝试转换为Brush而不是Color – snurre 2010-11-03 13:23:43

回答

0

大家说你需要一个刷而不是颜色是正确的。

解决方案:创建另一个返回SolidColorBrush的转换器,您将成为金手指。