StringFormat XAML绑定到多个控件
问题描述:
我有一个自定义Button
类型,我无法更改代码。此按钮有一个名为MyArguments
的属性,它接受一串以分号分隔的值。StringFormat XAML绑定到多个控件
我在屏幕上有一堆文本框供用户输入一些信息。
<TextBox Name="TestTextBox1" />
<TextBox Name="TestTextBox2" />
<TextBox Name="TestTextBox3" />
我想让我的Button取这三个值并将它们提供给MyArguments字符串属性。
如果只有一个单一的文本框,我可以使用的StringFormat选项是这样的:
<MyButton MyArguments="{Binding ElementName=TestTextBox1, Path=Text, StringFormat='Arguments;{0}' }/>
但是你不能使用多个控件使用的StringFormat。
我试过使用MultiBinding,但MyArguments属性给出了一个错误'The attachable property 'MyArguments' was not found in type MyButton'
。
<MyButton.MyArguments>
<MultiBinding StringFormat="Arguments;{0};{1}">
<Binding ElementName="TestTextBox1" Path="Text" />
<Binding ElementName="TestTextBox2" Path="Text" />
</MultiBinding>
</MyButton.MyArguments>
我需要在纯XAML中完成此操作。没有代码。
任何想法?
答
你忘了(例如local
)添加命名空间前缀的属性:
<local:MyButton>
<local:MyButton.MyArguments>
<MultiBinding StringFormat="Arguments;{0};{1}">
<Binding ElementName="TestTextBox1" Path="Text" />
<Binding ElementName="TestTextBox2" Path="Text" />
</MultiBinding>
</local:MyButton.MyArguments>
</local:MyButton>
答
这听起来像解析器无法将元素语法属性与您的元素实例相关联。即它认为你正在定义一个附加属性,即使它应该是一个实例属性。
例如
<ListBox ItemsSource="{Binding Data}">
<ListView.ItemTemplate>
<!-- Template -->
</ListView.ItemTemplate>
<ListBox>
您是否引用相同的类型?如何在按钮上没有前缀,或者是否有人实际上滥用系统并编译程序集以使用WPF名称空间,这看起来也很奇怪?
什么样的错误是什么?它是否编译?运行时失败? –
@ Dennis:如果你使用'StringFormat',则不行。 –
@ H.B。编译错误。 – CathalMF