C# 如何在Silverlight中创建自定义文本框控件?
我正在尝试创建Silverlight自定义文本框。我希望文本框的背景根据其中的值进行更改。如果低于零,它将变为红色;如果大于零,它将返回白色 我怎样才能做到这一点 我已经创建了一个简单的类和一个用户控件,但我还不能达到目标。这是密码 自定义文本框代码C# 如何在Silverlight中创建自定义文本框控件?,c#,wpf,xaml,silverlight,C#,Wpf,Xaml,Silverlight,我正在尝试创建Silverlight自定义文本框。我希望文本框的背景根据其中的值进行更改。如果低于零,它将变为红色;如果大于零,它将返回白色 我怎样才能做到这一点 我已经创建了一个简单的类和一个用户控件,但我还不能达到目标。这是密码 自定义文本框代码 public class CustomTB: TextBox { protected override void OnTextInputUpdate(TextCompositionEventArgs e) { dou
public class CustomTB: TextBox
{
protected override void OnTextInputUpdate(TextCompositionEventArgs e)
{
double val;
if (double.TryParse(e.Text, out val))
{
e.Handled = true;
}
}
}
用户控制C#代码
公共部分类AlabdCustomTextBox:UserControl
{
公共AlabdCustomTextBox()
{
初始化组件();
}
私有void CustomTB_TextChanged(对象发送方,textchangedventargs e)
{
双重价值;
if(double.Parse(customTB.Text)<0)
{
customTB.Background=新的SolidColorBrush(Colors.Red);
}
其他的
{
customTB.Background=新的SolidColorBrush(Colors.White);
}
BindingExpression binding=this.GetBindingExpression(TextBox.TextProperty);
if(null!=绑定)
{
binding.UpdateSource();
}
}
}
用户控件XAML代码
<cc:CustomTB Name="customTB" Background="White" Text="{Binding Screen.ComparisonItems.SelectedItem.AdditionalCost}" TextChanged="CustomTB_TextChanged" />
您可以使用标准的
文本框执行此操作
只需通过一个转换器将背景颜色绑定到文本长度,当值小于零时,该转换器返回红色
,其余时间返回白色
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null)
return System.Windows.Media.Color.White;
if ((int)value < 0)
return System.Windows.Media.Color.Red;
return System.Windows.Media.Color.White;
}
然后,您将使用此文本框而不是标准文本框,您不需要另一个UserControl
层:
<MyControls:MyTextBox Text={Binding Value, Mode TwoWay}"/>
<TextBox Text="{Binding Value, Mode=TwoWay}"
Background="{Binding Value, Mode=TwoWay, Converter={StaticResource myConverter}}" />
class MyTextBox : TextBox
{
protected override void OnKeyDown(KeyEventArgs e)
{
decimal value = 0;
if (Decimal.TryParse(this.Text, out value))
{
if (value < 0)
{
this.Background = System.Windows.Media.Color.Red;
}
else
{
this.Background = System.Windows.Media.Color.White;
}
}
base.OnKeyDown(e);
}
}
<MyControls:MyTextBox Text={Binding Value, Mode TwoWay}"/>