由于您显然无法在 C# 中创建 Silverlight DataTemplate,因此我尝试在 XAML 中创建一个。我有一个需要引用的转换器,我已经在 C# 中的另一个命名空间中定义了它。我试过这样做:
<UserControl.Resources>
<DataTemplate x:Key="PriceTemplate">
<TextBlock Text="{Binding Price, Converter={Converters:PriceConverter}}" />
</DataTemplate>
</UserControl.Resources>
其中 Converters 是指向正确命名空间的 xmlns。但是,我收到一个编译错误:
Type 'Converters:PriceConverter' is used like a markup extension but does not derive from MarkupExtension.
我尝试将 System.Windows.Markup.MarkupExtension 作为父项添加到我的转换器中,但它显然不存在于 Silverlight 中。
如何在 XAML 中引用我的转换器,而不必在 XAML 中重写它?
最佳答案
你想先做一个静态资源,然后绑定(bind)到静态资源的转换器。
<UserControl.Resources>
<conv:IntConverter x:Key="IntConverter"></conv:IntConverter>
</UserControl.Resources>
<StackPanel>
<TextBlock x:Name="Result" Margin="15" FontSize="20"
HorizontalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Converter={StaticResource IntConverter}}">
</TextBlock>
</StackPanel>
</Window>
所以“conv:”xml 命名空间被注册在文档的顶部,就像您使用自定义控件一样:
xmlns:conv="clr-namespace:MyFooCompany.Converters"
此示例改编自以下关于 WPF 相同问题的链接教程:
http://www.dev102.com/2008/07/17/wpf-binding-converter-best-practices/
关于c# - 如何在 Silverlight XAML 中引用另一个命名空间中的绑定(bind)转换器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2860606/