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

C# 如何在Silverlight XAML中引用另一个命名空间中的绑定转换器?,c#,silverlight,xaml,datatemplate,markup,C#,Silverlight,Xaml,Datatemplate,Markup,因为显然无法在C#中创建Silverlight数据模板,所以我尝试在XAML中创建一个。我需要引用一个转换器,它是我在另一个名称空间的C#中定义的。我试过这样做: <UserControl.Resources> <DataTemplate x:Key="PriceTemplate"> <TextBlock Text="{Binding Price, Converter={Converters:PriceConverter}}"

因为显然无法在C#中创建Silverlight数据模板,所以我尝试在XAML中创建一个。我需要引用一个转换器,它是我在另一个名称空间的C#中定义的。我试过这样做:

<UserControl.Resources>
        <DataTemplate x:Key="PriceTemplate">
            <TextBlock Text="{Binding Price, Converter={Converters:PriceConverter}}" />
        </DataTemplate>
    </UserControl.Resources>

其中,Converters是指向正确命名空间的xmlns。但是,我得到一个编译错误,它说:

类型“转换器:价格转换器”为 像标记扩展一样使用,但没有 不是从MarkupExtension派生的

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


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

您想先创建一个静态资源,然后绑定到作为静态资源的转换器

 <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>
本示例改编自以下链接教程,涉及WPF的同一问题:


您似乎在混淆类型和实例。转换器类型将“存在”命名空间中,但是在绑定中,我们没有指定类型作为转换器。相反,我们给绑定一个该类型的实际实例

通常,
IValueConverter
实例是无状态的,因此我们可以在加载数据模板实例的可用资源字典链中的任何位置保存一个公共实例

在xaml中,我们可以通过创建一个新的别名来引用另一个名称空间。考虑到这一点,您的xaml可以如下所示:-

<UserControl x:Class="SilverlightApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SilverlightApplication1"
    xmlns:localConverters="clr-namespace:SilverlightApplication1.Converters">
    <UserControl.Resources>
        <localConverters:PriceConverter x:Key="PriceConverter" />
        <DataTemplate x:Key="Test">
            <TextBlock Text="{Binding Price, Converter={StaticResource PriceConverter}}" />
        </DataTemplate>
    </UserControl.Resources>


添加到@Rokk发布的答案

<UserControl x:Class="SilverlightApplication1.UserControl1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SilverlightApplication1"
    xmlns:localConverters="clr-namespace:SilverlightApplication1.Converters">
    <UserControl.Resources>
        <localConverters:PriceConverter x:Key="PriceConverter" />
        <DataTemplate x:Key="Test">
            <TextBlock Text="{Binding Price, Converter={StaticResource PriceConverter}}" />
        </DataTemplate>
    </UserControl.Resources>
<RadioButton GroupName="Group1">
    <RadioButton.Template>
        <ControlTemplate>
            <ToggleButton IsChecked="{Binding IsChecked, RelativeSource={RelativeSource TemplatedParent}, Mode=TwoWay}">
                <ToggleButton.Content>
                    <SymbolIcon Symbol="Edit"/>
                </ToggleButton.Content>
                <ToolTipService.ToolTip>
                    <ToolTip Content="Sample Tooltip" Placement="Mouse" />
                </ToolTipService.ToolTip>
            </ToggleButton>
        </ControlTemplate>
    </RadioButton.Template>
</RadioButton>