2011-02-17 20 views
1

我終於做從的WinForms切換到WPF(3.5),和我想搬過來這個功能:WPF等效的Winforms ListControl.Format事件? (格式化列表項與代表)

我的一個常見的做法是控制的格式通過將委託傳遞給控件的容器,在Format事件中顯示列表/組合框。在「格式事件」中,委託按照我希望的方式顯示列表項目的顯示文本的格式(例如,通過組合顯示項目的屬性)。 是否有任何與WPF組合/列表框等​​效的方式來指定一個委託在運行時格式化List Item文本的外觀? 謝謝, 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

給大家屏息關注此問題...... 我貼在MS WPF論壇的問題,並從那裏回答我覺得對我來說最好的途徑是創建一個自定義的IValueConverter,我可以傳遞一個委託在Convert方法中使用,並將其設置爲DataTemplate中的Converter。

+0

我真的很希望這是個玩笑 - 爲什麼WPF中的一切都變得更加困難!? – 2013-10-09 13:06:03

0

如果您希望將每個項目的格式設置爲相同,請查看ListBox.ItemContainerStyle。這將包含每個項目的模板。如果您正在考慮根據某些邏輯更改每個項目的樣式,請使用上面的內容以及ListBox.ItemContainerStyleSelector。請參閱MSDN文檔http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyle.aspxhttp://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemcontainerstyleselector.aspx

+1

謝謝,但那不是我想要做的。我想用委託邏輯來格式化,而不是樣式。 – user144133 2011-02-18 05:00:02