Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/264.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# 未从UI设置扩展控件值_C#_Wpf_Custom Controls - Fatal编程技术网

C# 未从UI设置扩展控件值

C# 未从UI设置扩展控件值,c#,wpf,custom-controls,C#,Wpf,Custom Controls,嗨,我正在尝试扩展文本框的使用,它在我的代码中扩展了一个文本框。在扩展控件中,默认情况下,它将修剪起点和终点 我尝试过的代码 public class TextboxTrimSpaceing : TextBox { private string myVar; new public string Text { get { return myVar; } set { myVar = value

嗨,我正在尝试扩展文本框的使用,它在我的代码中扩展了一个文本框。在扩展控件中,默认情况下,它将修剪起点和终点

我尝试过的代码

public class TextboxTrimSpaceing : TextBox
    {

        private string myVar;

        new public string Text
        {
            get { return myVar; }
            set { myVar = value.TrimEnd().TrimStart(); }//Control is not coming here
        }

    }
UI

 <local:TextboxTrimSpaceing x:Name="TrimSpaceing" Text="   avi  aaa   "></local:TextboxTrimSpaceing>

  var i = TrimSpaceing.Text; //Getting Null

var i=trimpspaceing.Text//变空
这里是为什么我的控件不去setter,为什么我得到空结果
注意:它在UI中显示正确的字符串,我知道我可以在代码中维护它。但是我需要这样做。

如果要修剪文本,可以覆盖
OnTextChanged
方法:

public class TextboxTrimSpacing : TextBox
{
    private bool _trim = true;
    protected override void OnTextChanged(TextChangedEventArgs e)
    {
        base.OnTextChanged(e);
        if(_trim)
        {
            _trim = false;
            Text = Text?.Trim();
            _trim = true;
        }
    }
}

定义新的
Text
属性是没有意义的。

为什么我不能指定文本值?在XAML中。我是说我只是把道具摆正了?我不知道你的意思。当然,您可以设置属性的值。在XAML中执行此操作时,依赖项属性包装器实际上被绕过:``假设我这里有类似的东西,我正在创建一个clr对象,并将它们的值赋给20,同样,为什么我不能分配文本属性。@AvinashReddy:可以假设类型具有
Text
属性。@AvinashReddy您已经知道了
Text=“avi aaa”
不设置属性,而是设置基类的属性。因为XAML解析器直接调用SetValue。阅读有关依赖属性的文档。像这样替换控件属性是行不通的。当XAML解析器看到
Text=“avi aaa”
时,它直接调用
SetValue(TextProperty,…)
。你看,如果我写了一个
TextProperty
,那么它会工作吗?已经有一个了。一般来说,根本不要使用
new
属性,至少不要与WPF控件一起使用。