我在WPF项目中工作,我需要一个要求。 这是我的主要窗口:
http://img210.imageshack.us/img210/9752/rule.jpg
所以,我希望当我拖放自定义活动(聚合函数)时,在Compute TextBox中显示他的名字......有没有办法做到这一点????
例如:
1)拖放MaxActivity
2)在TextBox计算中显示:MaxActivity
3)拖放SumActivity
4)在TextBox Compute中显示:MaxActivity + SumActivity
5)拖放MaxActivity
6)TextBox计算中的显示:MaxActivity + SumActivity + MaxActivity1
非常感谢!
答案 0 :(得分:2)
如果你有这个
public sealed class MyActivity : Activity
{
public string Compute {get;set;} // NO!
和这个
<!-- NO! -->
<Label>Compute</Label><TextBox Text="{Binding ModelItem.Compute}"/>
你可能做错了。
您可以解析您的ModelItem并通过监听changes in the ModelItem并每次构造此字符串来生成此字符串。注意,调用构造函数时不会设置ModelItem,因此您必须监听ActivityDesigner.ModelItem属性的更改。没有这方面的事件,所以你必须知道如何listen to changes in a DependencyProperty.
一旦您收听了ModelItem中的更改,每当发生更改时,您都可以walk down your ModelItem( hard )或者只是从ModelItem获取Activity并进行检查。
var child = ModelItem.Properties["Child"].Value.GetCurrentValue();
if(child == null)
computeTextBox.Text = "Please add some computation stuff.";
else
// hard stuff goes here...
沿着从Activity的孩子到内部任何活动的路径走向可能是危险的,因为你不能假设你的用户已经抛出了序列而不是单个MaxActivity,或者他们没有七个嵌套的序列等等。所以你必须有一套非常复杂和脆弱的if
else
逻辑来尝试解析下面包含的内容。如果您开始在ModelItem之外更改Activity树的属性,那么您将与UI不同步。
现在,在阅读完之后,请回到第1点。我在此答案中列出并遵循我的建议。完全放弃这个想法。