我现在有一个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;
}
}
}
}
答案 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
时,可以立即更改等式。