c#wpf文本框-向输入文本框添加文本

c#wpf文本框-向输入文本框添加文本,c#,wpf,events,textbox,C#,Wpf,Events,Textbox,当用户插入文本时,我想在wpf文本框中的任何输入文本中添加百分号“%” 因此,当用户输入数字时,将在输入框中的任何数字上添加%符号, 例如:5将在文本框中显示为5% 0 - 0% 100-100% 我尝试了以下代码: <TextBox x:Name="TextBoxInputValue" Text="{Binding AddPercentSign, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0}%}" Style="{Stat

当用户插入文本时,我想在wpf文本框中的任何输入文本中添加百分号“%”

因此,当用户输入数字时,将在输入框中的任何数字上添加%符号, 例如:5将在文本框中显示为5% 0 - 0% 100-100%

我尝试了以下代码:

<TextBox x:Name="TextBoxInputValue" Text="{Binding AddPercentSign, UpdateSourceTrigger=PropertyChanged, StringFormat={}{0}%}" Style="{StaticResource @TextBoxStyle}" Width="100" Height="20"></TextBox>
以及:

但当用户插入输入时,它对文本框没有影响

我怎样才能达到这个结果


谢谢

您可以使用一个标志来决定是否应该在事件处理程序中实际设置
Text
属性:

private bool _handleEvent = true;
private void TextChanged(object sender, TextChangedEventArgs e)
{
    if (_handleEvent)
    {
        _handleEvent = false;
        MyTextBox.Text = MyTextBox.Text + "%$#";
        _handleEvent = true;
    }
}

如果您是绑定您的
文本
属性,则可以使用
StringFormat

<TextBox Text="{Binding SomeProperty, StringFormat={}{0}%}" />

查看教程

但当用户插入输入时,它对文本框没有影响

您需要定义源属性,并将
文本框的
DataContext
设置为定义它的类,例如:

<TextBox x:Name="textBox1" Text="{Binding SomeProperty, UpdateSourceTrigger=PropertyChanged, StringFormat='{}{0}%'}" />

谢谢这是工作。。。但并不像我想象的那样安静。。。我已经编辑了我的问题,你能不能把代码改成:MyTextBox.Text=MyTextBox.Text+“%”?没有原因,然后当用户插入例如12345时,我得到:12345%%%n尝试绑定到int/double/decimal属性,然后使用@Mike Eason建议的StringFormat。一旦你的问题得到回答,请不要完全改变你原来的问题。如果您有其他问题,请问一个新问题。我尝试添加:“{Binding Path=Percentage,StringFormat={}{0}%}”,与此问题相同:但它对我的文本框输入没有任何作用。。。我已经编辑了我的问题您是否真的将AddPercentSign属性添加到定义TextBoxInputValue的同一个类中?如果在文本框中看不到值,则绑定将不起作用。是的,我已将此:public int AddPercentSign{get;set;}添加到同一个类中。请将您的整个代码发布到文件后面好吗?这是一个巨大的文件。。。从另一个角度来看,您能否分享一个执行此任务的工作代码示例?将%sign添加到任何文本插入到TextBoxI中的操作我已经执行了。只是您似乎无法将其应用到代码中。这就是为什么我需要查看您的代码,以便能够告诉您它有什么问题。
<TextBox Text="{Binding SomeProperty, StringFormat={}{0}%}" />
<TextBox x:Name="textBox1" Text="{Binding SomeProperty, UpdateSourceTrigger=PropertyChanged, StringFormat='{}{0}%'}" />
public partial class Window1 : Window
{
    public Window1()
    {
        InitializeComponent();
        textBox1.DataContext = this;
    }

    public int SomeProperty { get; set; }
}