c# - 将自定义 FontFamilys 绑定到 TextBlocks 列表
问题描述
我很确定我会以错误的方式解决这个问题,但任何能帮助我朝着正确方向前进的帮助都将不胜感激。
基本上,我正在尝试添加自定义字体列表,然后将它们显示在 TextBlocks 列表中,但无论我尝试了多少不同的方法,我都会不断收到同样的错误,这没有多大意义我。
错误:BindingExpression 路径错误:在“Windows.UI.Xaml.Media.FontFamily”上找不到“FontFamilyList”属性。BindingExpression:路径='FontFamilyList' DataItem='Windows.UI.Xaml.Media.FontFamily'; 目标元素是“Windows.UI.Xaml.Controls.TextBlock”(名称=“FontSelector”);目标属性是“FontFamily”(类型“FontFamily”)
最终结果应该是连续 24 个 TextBlock,每个都包含字符串“abcdef”,但每个都使用不同的字体。
这是我到目前为止所尝试的。
班级
public static class CustomFonts
{
public static FontFamily sketchy = new FontFamily("/Assets/font/a_bit_sketchy.ttf#sketchy");
public static FontFamily adam = new FontFamily("/Assets/font/adam.cg_pro.otf#adam");
public static FontFamily addled = new FontFamily("/Assets/font/addled.TTF#addled");
public static FontFamily adventure = new FontFamily("/Assets/font/adventure.ttf#adventure");
public static FontFamily agentorange = new FontFamily("/Assets/font/agentorange#agentorange");
public static FontFamily arial = new FontFamily("/Assets/font/arial.ttf#arial");
public static FontFamily bira = new FontFamily("/Assets/font/bira.ttf#bira");
public static FontFamily blueprint = new FontFamily("/Assets/font/blueprint.otf#blueprint");
public static FontFamily branbollFet = new FontFamily("/Assets/font/branbollFet.ttf#branbollFet");
public static FontFamily budmo = new FontFamily("/Assets/font/budmo_jiggler.otf#budmo");
public static FontFamily childs = new FontFamily("/Assets/font/childs.ttf#childs");
public static FontFamily collegiate = new FontFamily("/Assets/font/collegiate.ttf#collegiate");
public static FontFamily comesinhandy = new FontFamily("/Assets/font/comesinhandy.ttf#comesinhandy");
public static FontFamily dknanuk = new FontFamily("/Assets/font/dk_nanuk.otf#dknanuk");
public static FontFamily itcedscr = new FontFamily("/Assets/font/itcedscr.TTF#itcedscr");
public static FontFamily levi = new FontFamily("/Assets/font/levi_brush.TTF#levi");
public static FontFamily lobster = new FontFamily("/Assets/font/lobster.otf#lobster");
public static FontFamily missionscript = new FontFamily("/Assets/font/mission_script.otf#mission");
public static FontFamily moonbold = new FontFamily("/Assets/font/moon_bold.otfmoonbold");
public static FontFamily moonlight = new FontFamily("/Assets/font/moon_light.otf#moonlight");
public static FontFamily permanentmarker = new FontFamily("/Assets/font/permanentmarker.ttf#permanent");
public static FontFamily phosphate = new FontFamily("/Assets/font/phosphate.ttc#phosphate");
public static FontFamily ralewaydots = new FontFamily("/Assets/font/raleway_dots.ttf#raleway");
public static FontFamily rosewood = new FontFamily("/Assets/font/rosewood.otf#rosewood");
public static List<FontFamily> FontFamilyList;
public static List<FontFamily> PopulateFonts()
{
FontFamilyList = new List<FontFamily>
{
sketchy,
adam,
addled,
adventure,
agentorange,
arial,
bira,
blueprint,
branbollFet,
budmo,
childs,
collegiate,
comesinhandy,
dknanuk,
itcedscr,
levi,
lobster,
missionscript,
moonbold,
moonlight,
permanentmarker,
phosphate,
ralewaydots,
rosewood
};
return FontFamilyList;
}
}
设置 ItemsSource
public DesignView()
{
InitializeComponent();
FontList.ItemsSource = CustomFonts.PopulateFonts();
}
XAML
<Grid Height="150" Margin="0,270,0,0">
<Image Source="ms-appx:///Resources/Elements/prev_250.png" Height="100" Width="100" HorizontalAlignment="Left"></Image>
<ListView Name="FontList" ItemsSource="{Binding CustomFonts}"
ScrollViewer.HorizontalScrollMode="Enabled"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
ScrollViewer.IsHorizontalRailEnabled="True" VerticalAlignment="Center" HorizontalAlignment="Center"
Margin="100,270,100,20"
Height="70" AutomationProperties.SizeOfSet="24">
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<VirtualizingStackPanel Orientation="Horizontal" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.ItemTemplate>
<DataTemplate>
<Grid VerticalAlignment="Bottom" Margin="0,0,0,0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBlock Name="FontSelector" Text="abcdef" Grid.Column="0" Height="70" Width="70" Margin="1" VerticalAlignment="Center" FontFamily="{Binding FontFamilyList}">
</TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<Image Source="ms-appx:///Resources/Elements/next_250.png" Height="100" Width="100" HorizontalAlignment="Right"></Image>
</Grid>
解决方案
我做了一个简单的项目来看看为什么会出现问题以及它是如何工作的。正如@eberthold 提到的,您已经覆盖了ItemsSource
从UI 工作的内容。取而代之的是,您可以绑定 DataContext。此外,您不必使用 add'l 方法来创建列表。您可以在类的构造函数中执行此操作。
我把你的班级从Static
改为Non-Static
。为了测试,我将系统字体添加到列表中。
public class CustomFonts
{
public FontFamily sketchy = new FontFamily("/Assets/font/a_bit_sketchy.ttf#sketchy");
public FontFamily adam = new FontFamily("/Assets/font/adam.cg_pro.otf#adam");
public FontFamily addled = new FontFamily("/Assets/font/addled.TTF#addled");
public FontFamily adventure = new FontFamily("/Assets/font/adventure.ttf#adventure");
...
public List<FontFamily> FontFamilyList { get; set; }
public CustomFonts()
{
FontFamilyList = new List<FontFamily>
{
new FontFamily("Times New Roman"),
new FontFamily("Monotype Corsiva"),
new FontFamily("Cambria"),
new FontFamily("Calibri")
};
//FontFamilyList = new List<FontFamily>
//{
// sketchy,
// adam,
// addled,
// adventure,
/// ....
//};
}
}
这是我的 XAML
<Grid>
<ListView Name="FontList" AutomationProperties.SizeOfSet="24" ItemsSource="{Binding FontFamilyList}">
<ListView.DataContext>
<app4:CustomFonts />
</ListView.DataContext>
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="ABCDEF" FontFamily="{Binding }"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
所以我将XAML 中的DataContext
of直接设置为类。然后我将属性直接绑定到 ItemsSoure。由于您想将 FontFamily 绑定到的属性,并且这是列表中的元素,所以它只是FontList
CustomFonts
FontFamiltList
TextBox
FontFamily
{Binding }
下面是输出。
推荐阅读
- python - 使用 urllib 读取 html 时缺少某些文本
- javascript - jQuery datepicker 没有出现,但是元素出现在屏幕的角落
- php - Laravel 活动菜单类
- javascript - 带有 Rollup 的 JS 库中的 Web Worker
- c# - 在 WPF 的单独选项卡中显示不同的 cefsharp 页面时出现问题
- javascript - Selenium chrome 浏览器不会使用 Electron 在后台启动
- java - 前倾还是后倾?TYPE_ROTATION_VECTOR
- html - 为什么我的本地 html 链接会转到父文件夹而不是 .html?
- python - 是否可以在谷歌电子表格中创建一个宏来执行 python 代码?
- r - how to compare a vector of length 1 with a vector of length greater than 1?