我在Windows Store应用中有一个转换器类:
namespace MyNamespace {
public class ColorToBrushConverter : IValueConverter {
public object Convert(object value, Type targetType, object parameter, string language) {
if (value is Windows.UI.Color) {
Windows.UI.Color color = (Windows.UI.Color) value;
SolidColorBrush r = new SolidColorBrush(color);
return r;
}
CommonDebug.BreakPoint("Invalid input to ColorToBrushConverter");
throw new InvalidOperationException();
}
public object ConvertBack(object value, Type targetType, object parameter, string language) {
throw new NotImplementedException();
}
}
}
我现在正在尝试在xaml中使用它。我无法为xaml找出正确的语法来告诉它使用我的转换器。
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" >
<Setter Property="Background" Value="{Binding Source=BackgroundColor, UpdateSourceTrigger=PropertyChanged, Converter=????????????????}"/>
</Style>
</ListView.ItemContainerStyle>
编辑: 显然,Windows Store Apps不允许开发人员使用在WPF中可用的所有数据绑定(bind)。这大概可以解释我的部分问题。但是我仍然不确定在Windows 8.1更新之后这种情况是否会继续存在。
最佳答案
这样做的通常方法是在控制资源中声明转换器的实例,然后将其引用为静态资源。作为此过程的一部分,您必须定义一个XML namespace 别名(如果尚未定义的话)(请注意,只有在该 namespace 不在当前程序集中时,才必须指定该程序集)。这是一个部分示例:
<Window x:Class="....etc..."
xmlns:Converters="clr-namespace:MyNamespace;[assembly=the assembly the namespace is in]"
/>
<Window.Resources>
<Converters:ColorToBrushConverter x:Key="MyColorToBrushConverter" />
</Window.Resources>
<Grid>
<ListView>
[snip]
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem" >
<Setter Property="Background"
Value="{Binding Path=BackgroundColor,
UpdateSourceTrigger=PropertyChanged,
Converter={StaticResource MyColorToBrushConverter}
}"
/>
</Style>
</ListView.ItemContainerStyle>
[snip]
关于c# - 在XAML中指定自定义转换器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23038086/