如何在Silverlight XAML中引用另一个命名空间中的绑定转换器?

Mik*_*ras 2 c# silverlight markup xaml datatemplate

由于您显然无法在C#中创建Silverlight DataTemplate,因此我尝试在XAML中创建一个.我有一个我需要引用的转换器,我在另一个命名空间中用C#定义.我试过这样做:

<UserControl.Resources>
        <DataTemplate x:Key="PriceTemplate">
            <TextBlock Text="{Binding Price, Converter={Converters:PriceConverter}}" />
        </DataTemplate>
    </UserControl.Resources>
Run Code Online (Sandbox Code Playgroud)

转换器是指向正确名称空间的xmlns.但是,我得到一个编译错误,说:

类型'转换器:PriceConverter'用作标记扩展名,但不是从MarkupExtension派生的.

我尝试将System.Windows.Markup.MarkupExtension添加为我的转换器的父级,但它显然在Silverlight中不存在.

如何在XAML中引用我的转换器,而不必在XAML中重写它?

Dav*_*vid 11

您希望首先创建静态资源,然后绑定到作为静态资源的转换器.

 <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>
Run Code Online (Sandbox Code Playgroud)

因此,"conv:"xml命名空间已在文档顶部注册,就像使用自定义控件一样:

xmlns:conv="clr-namespace:MyFooCompany.Converters"
Run Code Online (Sandbox Code Playgroud)

此示例改编自以下关于WPF相同问题的链接教程:

http://www.dev102.com/2008/07/17/wpf-binding-converter-best-practices/