Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在Silverlight中创建自定义文本框控件?_C#_Wpf_Xaml_Silverlight - Fatal编程技术网

C# 如何在Silverlight中创建自定义文本框控件?

C# 如何在Silverlight中创建自定义文本框控件?,c#,wpf,xaml,silverlight,C#,Wpf,Xaml,Silverlight,我正在尝试创建Silverlight自定义文本框。我希望文本框的背景根据其中的值进行更改。如果低于零,它将变为红色;如果大于零,它将返回白色 我怎样才能做到这一点 我已经创建了一个简单的类和一个用户控件,但我还不能达到目标。这是密码 自定义文本框代码 public class CustomTB: TextBox { protected override void OnTextInputUpdate(TextCompositionEventArgs e) { dou

我正在尝试创建Silverlight自定义文本框。我希望文本框的背景根据其中的值进行更改。如果低于零,它将变为红色;如果大于零,它将返回白色

我怎样才能做到这一点

我已经创建了一个简单的类和一个用户控件,但我还不能达到目标。这是密码

自定义文本框代码

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}"/>