0

下午好。我的名字是尤金。首先,请原谅我的英语不好。我有以下问题。在 WPF 应用程序主窗口中,我有一个 TextBox,在 XAML 标记中,我将其描述如下:

<TextBox Name="tbxRange" Grid.Row="1" Grid.Column="3" TextAlignment="Center"
         Text="{Binding Path=CurCompassRange.Range, UpdateSourceTrigger=PropertyChanged,
         Mode=OneWayToSource, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"/>

在这个 TextBox 中,我打印一个浮点数值。可以多次更改 Text 属性的内容以等待程序执行。在 MainWindow 类中,我有以下成员作为字段:

private static Double topMargin = 0;
private static Double bottomMargin = 0;
private static Double initialValue;

应用程序开始运行时分配给“initialValue”的值。我需要以下内容。当我在 TextBox 中打印一个新数字时,它的值首先必须从“initialValue”中减去(“initialValue”本身的值不会改变),减法的结果必须存储在“bottomMargin”中,其次是打印数字的值必须添加到“initialValue”,并且添加的结果必须存储在“topMargin”中。我可以多次更改 TextBox 的 Text 属性的内容,以等待程序执行。我的问题如下。我可以在 XAML 标记中编写一些触发器,这些触发器可以在每次 TextBox Text 属性的值发生变化时执行上述减法和加法吗?当然,我知道我可以尝试编写(在 C# 上)TextBox TextInput 事件处理程序来执行这些操作并在其主体中执行减法和加法,但是在 XAML 标记中使用触发器似乎更优雅。我会非常感谢你的帮助。我对WPF不是很擅长。请帮我。

4

1 回答 1

0

首先,您不能动态地将 Margin.Top 或 Margin.Bottom 更改为“Top”或“Bottom”本身不是依赖属性。但是,Margin 本身是一个依赖属性,它接收“Thickness”类型的实例。简而言之,这意味着即使您打算单独更改 Margin.Top,您也必须应用新的 Margin..

其次,您需要执行的各种计算不是仅使用 XAML 就能完成的事情,您必须在后面的代码中创建一个值转换器并将 XAML 绑定关联到使用该值转换器。

所以简单的答案是否定的 - 你不能以纯粹的形式做你在 XAML 中描述的事情,你将不得不以一种或另一种方式编写一些代码隐藏。

于 2013-02-19T15:07:56.847 回答