每当我在文本框中输入内容时,如何更新文本块内的文本?

时间:2017-06-03 07:26:03

标签: c# wpf xaml

我现在有一个WPF应用程序,它给了我想要的结果。它读取三个文本框“aValue”,“bValue”和“cValue”内的文本,并使用它们在TextBlock“quadEqn”中打印二次方程。问题是,我需要文本块在任何文本框中输入数字时显示或更新等式。

这是我的xaml

<Grid>
    <TextBox x:Name="aValue" KeyDown="TextBox_KeyDown" Text="" .../>
    <TextBox x:Name="bValue" KeyDown="TextBox_KeyDown" Text="" .../>
    <TextBox x:Name="cValue" KeyDown="TextBox_KeyDown" Text="" .../>

        <TextBlock x:Name="quadEqn" Text="" .../>
</Grid>

和背后的代码

    private void TextBox_KeyDown(object sender, RoutedEventArgs e)
    {
        sendValuesToEqn();
    }

    public void sendValuesToEqn()
    {
        double a, b, c;
        if(aValue.Text=="") a = 0;
        else a = double.Parse(aValue.Text);

        if (bValue.Text == "") b = 0;
        else b = double.Parse(bValue.Text);

        if (cValue.Text == "") c = 0;
        else c = double.Parse(cValue.Text);

        writeEquation(a, b, c);
    }

    public void writeEquation(double a, double b, double c)
    {
        if(a==0)
        {
            if(b==0)
            {
                if(c==0)
                {
                    quadEqn.Text = "";
                }
                else
                {
                    quadEqn.Text = c.ToString();
                }
            }
            else
            {
                if(c==0)
                {
                    quadEqn.Text = b + "x";
                }
                else
                {
                    quadEqn.Text = b + "x + " + c;
                }
            }
        }
        else
        {
            if(b==0)
            {
                if(c==0)
                {
                    quadEqn.Text = a + "x\xB2";
                }
                else
                {
                    quadEqn.Text = a + "x\xB2 + " + c;
                }
            }
            else
            {
                if(c==0)
                {
                    quadEqn.Text = a + "x\xB2 + " + b + "x";
                }
                else
                {
                    quadEqn.Text = a + "x\xB2 + " + b + "x + " + c;
                }
            }
        }
    }

2 个答案:

答案 0 :(得分:0)

如何创建转换器:

  

的Xaml:

    <TextBox x:Name="aValue"  Text="" Height="30" Width="100" />
    <TextBox x:Name="bValue"  Text="" Height="30" Width="100" />
    <TextBox x:Name="cValue"  Text="" Height="30" Width="100" />
    <TextBlock x:Name="quadEqn" Height="30" Width="100" Background="BurlyWood">
        <Run Text="{Binding Text,ElementName=aValue,Converter={StaticResource quadraticEquationConverter},ConverterParameter=aValue}"/>            
        <Run Text="{Binding Text,ElementName=bValue,Converter={StaticResource quadraticEquationConverter},ConverterParameter=bValue}"/>            
        <Run Text="{Binding Text,ElementName=cValue,Converter={StaticResource quadraticEquationConverter},ConverterParameter=cValue}"/>
   </TextBlock>
  

在您的窗口资源中定义转换器:

<Window.Resources>
    <local:QuadraticEquationConverter x:Key="quadraticEquationConverter"/>
</Window.Resources>
  

和你的转换器类:

public class QuadraticEquationConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {            
        if(parameter.Equals("aValue") && value.ToString() != "")
            return value + "x^2 + ";
        else if(parameter.Equals("bValue") && value.ToString() != "")
            return value + "x + ";
        else
            return value;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

答案 1 :(得分:0)

我认为最好的解决方案是通过MVVM而不是通过后面的代码来描述逻辑。

在视图模型中,您应为每个TextBox创建三个字符串属性:

public string A { get { ... } set { ... } }
public string B { get { ... } set { ... } }
public string C { get { ... } set { ... } }

然后将Text'es的TextBox属性绑定到这些属性。不要忘记在视图模型类中实现INotifyPropertyChanged并在视图模型属性的setter中触发PropertyChanged

然后为等式TextBlock创建一个属性:

public string Equation { get { ... } set { ... } }

同时在此属性的setter中触发PropertyChanged。将等式Text的{​​{1}}属性绑定到它。

TextBlock,[{1}},A的制定者中,调用一个方法,该方法将采用这三个值并构建一个方程式。当构造的等式将其设置为视图模型的B属性时。

当您在绑定集C中输入Equation时,可以立即更改等式。