我有一个带有这样的界面的项目列表
public interface INamedItem
{
string DisplayName
{
get;
}
}
在silverlight中,我可以绑定到列表框并显示显示名称,这样就可以了。
但是,根据DisplayName的值,我想以不同的方式显示它(使用不同的DataTemplate?)。
如果DisplayName有两个'\ t',我希望第一个标签前的文字左对齐,标签之间的文字居中,文本的其余部分右对齐。
有没有简单的方法可以做到这一点?我发布了一个“回答”,我在谷歌发现添加这篇文章后发现,但我觉得他们必须是一个更好的方式。
答案 0 :(得分:0)
所以这似乎有用(http://weblogs.asp.net/joewrobel/archive/2009/01/25/conditional-formatting-in-the-silverlight-datagrid.aspx)(忽略带列的固定)。
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
INamedItem namedItem = value as INamedItem;
if (namedItem == null)
{
TextBlock block = new TextBlock();
block.Text = "";
return block;
}
string[] tabSeperatedParts = namedItem.DisplayName.Split('\t');
if (tabSeperatedParts.Count() != 3)
{
TextBlock block = new TextBlock();
block.Text = namedItem.DisplayName;
return block;
}
else
{
Grid grid = new Grid();
grid.RowDefinitions.Add(new RowDefinition());
for (int i = 0; i < 3; ++i)
{
ColumnDefinition col = new ColumnDefinition();
col.MinWidth = 220;
grid.ColumnDefinitions.Add(col);
TextBlock text = new TextBlock();
text.Text = tabSeperatedParts[i];
grid.Children.Add(text);
Grid.SetColumn(text, i);
}
((TextBlock)grid.Children[0]).TextAlignment = TextAlignment.Left;
((TextBlock)grid.Children[1]).TextAlignment = TextAlignment.Center;
((TextBlock)grid.Children[2]).TextAlignment = TextAlignment.Right;
return grid;
}
}
<ScrollViewer.Resources>
<magecrawlList:ListItemValueConverter x:Key="ItemConverter"/>
</ScrollViewer.Resources>
<ListBox ItemsSource="{Binding}">
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl Content="{Binding Converter={StaticResource ItemConverter}}" HorizontalContentAlignment="Stretch"
VerticalContentAlignment="Stretch" />
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>