我终于从Winforms切换到WPF(3.5),我试图将此功能转移到:
我的常见做法是通过将委托传递给控件的容器来控制Format事件中列表/组合框显示的格式。在格式事件中,委托格式化列表项的显示文本,如我希望它出现(例如,通过组合显示项的属性)。 是否有任何与WPF组合/列表框等效的方法来指定用于在运行时格式化列表项文本外观的委托? 谢谢, YS
仅供参考 - 我在这里试图了解,如我的回答所述:
代码隐藏:
public partial class MainWindow : Window
{
private List<Foo> l = new List<Foo>();
//Formatting done by delegate, passed to converter.
MyConverter<Foo> cv = new MyConverter<Foo>(f=> "#" + f.ID + " = " + f.Name);
public MainWindow()
{
Resources.Add("myConverter", cv);
l.Add(new Foo(){ID=1, Name = "aaaa aaaa"});
l.Add(new Foo(){ID=2, Name = "bbbb bbbb "});
DataContext = l;
InitializeComponent();
}
}
public class Foo
{
public int ID { get; set; }
public string Name { get; set; }
}
public class MyConverter<T> : IValueConverter
{
private Func< T, string> _formatter { get; set; }
public MyConverter(Func<T, string> Formatter)
{
_formatter = Formatter;
}
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return _formatter((T)value);
}
}
然后在xaml中:
<ComboBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Converter={StaticResource ResourceKey=myConverter}}"> </TextBlock>
</DataTemplate>
</ComboBox.ItemTemplate>
答案 0 :(得分:0)
如果您希望格式化每个项目,请查看ListBox.ItemContainerStyle。这将包含每个项目的模板。如果您正在考虑根据某些逻辑更改每个项目的样式,请使用上面的ListBox.ItemContainerStyleSelector。请参阅msdn doc http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyle.aspx和http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyleselector.aspx
答案 1 :(得分:0)
对于每个人都气喘吁吁地关注这个问题...... 我在MS WPF论坛上发布了这个问题,从答案中我认为最好的方法是创建一个自定义的IValueConverter,我可以传入一个委托在Convert方法中使用,并将其设置为转换器中的DataTemplate中。