我需要编写一个显示字体的comboBox,每个字体都是程式化的。如此图片:
我不得不通过代码隐藏来实现它,而不是xaml。
我的xaml代码:
public View getView(int position, View conver, ViewGroup parent) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
if (convertView == null) {
convertView = inflater.inflate(R.layout.ac_layout, null);
}
ImageView icon = (ImageView) convertView.findViewById(R.id.venue_image);
icon.setImageResource(sportsMap.get(sportList.get(position).getId()));
TextView venueName = (TextView) convertView.findViewById(R.id.venue_name);
//Toast.makeText(context,venueList.get(position).getVenueName(),Toast.LENGTH_SHORT ).show();
venueName.setText(sportList.get(position).getDisplayName());
TextView Place = (TextView)convertView.findViewById(R.id.place);
Place.setText("sad");
return convertView;
}
和c#:
<Window x:Class="_08_Binding_DataTemplate_CodeBehind.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="200" Width="200">
<Grid>
<ComboBox x:Name="lstFonts" HorizontalAlignment="Stretch" VerticalAlignment="Top" />
</Grid>
我尝试过很多变种,但都没有成功。我猜绑定失败但不知道如何解决它。 我得到的最多的东西已经与选定的来源相关联,但随后更改了列表中的所有元素,如下图所示。
我不知道如何对这个绑定进行编程,以便列表中的每个项目都能引用自己。
感谢您的帮助。
答案 0 :(得分:0)
在XAML上执行此操作非常简单,请尝试以下操作,
<ComboBox x:Name="lstFonts" ItemsSource="{x:StaticFonts.SystemFontFamilies}" HorizontalAlignment="Stretch" VerticalAlignment="Top" ItemTemplate="{StaticResource item}" >
<ComboBox.Resources>
<DataTemplate>
<TextBlock Text="{Binding }" FontFamily="{Binding }"/>
</DataTemplate>
</ComboBox.Resources>
<ComboBox>
答案 1 :(得分:0)
我可以通过加载xaml标记来实现,但我想只使用C#代码对其进行编程,而不使用xaml标记。感谢。
public MainWindow()
{
InitializeComponent();
CollectionViewSource c = new CollectionViewSource();
c.Source = Fonts.SystemFontFamilies;
c.SortDescriptions.Add(new SortDescription("Source", ListSortDirection.Ascending));
lstFonts.ItemsSource = c.View;
lstFonts.ItemTemplate = getDataTemplateFromXAML();
}
private DataTemplate getDataTemplateFromXAML()
{
StringBuilder sb = new StringBuilder();
sb.Append("<DataTemplate xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\">");
sb.Append("<StackPanel VirtualizingStackPanel.IsVirtualizing=\"True\">");
sb.Append("<TextBlock Text=\"{Binding }\" FontFamily=\"{Binding }\"/>");
sb.Append("</StackPanel>");
sb.Append("</DataTemplate>");
StringReader sr = new StringReader(sb.ToString());
XmlReader xr = XmlReader.Create(sr);
DataTemplate retVal = XamlReader.Load(xr) as DataTemplate;
return retVal;
}