我有自定义Button
类型,我无法更改代码。此Button有一个名为MyArguments
的属性,它接受一串以分号分隔的值。
我在屏幕上有一堆TextBox,供用户输入一些信息。
<TextBox Name="TestTextBox1" />
<TextBox Name="TestTextBox2" />
<TextBox Name="TestTextBox3" />
我希望我的Button获取这三个值并将它们提供给MyArguments字符串属性。
如果只有一个TextBox,我可以像这样使用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中完成此操作。没有代码。
有什么想法吗?
答案 0 :(得分:2)
您忘记将名称空间前缀(例如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>
答案 1 :(得分:0)
这听起来好像解析器无法将元素语法属性与元素实例相关联。即它认为你正在定义一个附加属性,即使它应该是一个实例属性。
e.g。
<ListBox ItemsSource="{Binding Data}">
<ListView.ItemTemplate>
<!-- Template -->
</ListView.ItemTemplate>
<ListBox>
你引用的是同一类型吗?您的按钮上没有前缀,或者有人实际滥用系统并编译程序集以使用WPF命名空间,这看起来很奇怪?