我正在构建一个使用ResourceDictionaries其他程序集的应用程序,但在使用字体时遇到了问题。
有一个名为MyFontAssembly的程序集将字体以及对它们的引用存储为ResourceDictionary. 它的结构如下:
MyFontAssembly
- FontDictionary.xaml - (stores references to fonts)
- Fonts
- FontA.ttf
- FontB.ttf
...
Run Code Online (Sandbox Code Playgroud)
还有另一个程序集用于存储ResourceDictionaries样式控件,它称为MyStylesAssembly。然后将 MyStylesAssembly 中的 ResourceDictionaries 合并到应用程序的 App.xaml 中,以提供可重用的样式。
问题是我的样式确实识别字体资源(代码没有崩溃,因为它无法通过其键找到资源),但看起来没有应用存储为 ttf 文件的字体。
我在我的FontDictionary.xaml.
<FontFamily x:Key="MyFontKey">Fonts/#MyFontName</FontFamily>
<FontFamily x:Key="MyFontKey">pack://application:,,,/MyFontAssemblyName;Component/Fonts/#MyFontName</FontFamily>
<FontFamily x:Key="MyFontKey">/MyFontAssemblyName;Component/Fonts/#MyFontName</FontFamily>
<FontFamily x:Key="MyFontKey">pack://application:,,,/Fonts/#MyFontName</FontFamily>
Run Code Online (Sandbox Code Playgroud)
笔记:
<FontFamily x:Key="MyFontKey">Fonts/#MyFontName</FontFamily>在具有相同结构的单个 exe 项目中使用实现,一切都很好,当我在重构期间将实现拆分为几个程序集时出现问题,就像我描述的那样。MyFontAssembly已MyStylesAssembly正确合并。我在这里只是用那个名字来称呼它,在实际代码中,它还有一些ResourceDictionaries由MyStylesAssembly. 问题似乎只是<FontFamily>标签无法识别 ttf 文件。MyFontAssembly并且MyStylesAssembly是类型的项目ClassLibrary并且不包含除 in …我发现了这篇关于提高ResourceDictionaries网络性能的文章,但问题是它已经很旧了(2011 年)。我正在考虑实现这样的东西,但我想知道 Microsoft 是否没有在 .NET Framework 的最新版本中修复此问题。关于这个话题我有几个问题,希望这里有人能给出答案:
ResourceDictionaries通过创建它们的多个实例(每次将它们分配给控件时一个实例)来进行管理?"CustomButtonStyle"例如,当我在ResourceDictionary名为 的"ButtonStyles"程序集中调用样式,然后在应用程序中"StylesAssembly"引用该样式,并为其分配了 20 个时,这甚至是一个问题吗?App.xamlButtonsCustomButtonStyle"ButtonStyles" ResourceDictionary?是否可以转换字符串
"value > 5 && value <= 10"
Run Code Online (Sandbox Code Playgroud)
到if语句?
if (value > 5 && value <= 10)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
我有条件存储在数据库中的字符串,所以它必须是一个动态转换
我正在努力将本地化添加到我的Web应用程序中。我已经配置了IStringLocalizer,并且可以正确地从两个不同的resx文件读取字符串资源,具体取决于浏览器设置。然后,它将那些字符串资源映射到ViewData,我的View将从ViewData以正确的语言获取文本(不确定这是否是最好的方法,但是现在我不想在此花费更多的时间)。
关键是我的UI中还有一个下拉列表,允许用户手动切换语言。我正在读取用户在控制器操作中设置的值,并将其添加到cookie中,但现在我还想将应用程序的区域性设置为与cookie中的字符串匹配的区域性。
是否可以通过MVC Core中的控制器操作设置应用程序区域性?如果是,那么如何正确执行此操作?
编辑:
我刚刚知道我可以做这样的事情:
<a class="nav-item nav-link" asp-route-culture="en-US">English</a>
Run Code Online (Sandbox Code Playgroud)
它将添加?culture=en-US到我的路线中,从而为我设置页面的区域性。有什么方法可以不必将其保存在地址栏中?
编辑2:
关于亚当·西蒙(Adam Simon)的回答:
CookieRequestCultureProvider我想在我的应用程序中使用它,但是问题是它不会产生任何cookie。文档说,.net核心将通过检查哪个将提供一个可行的解决方案来确定要使用的提供程序,该解决方案从QueryStringRequestCultureProvider(然后到CookieRequestCultureProvider)其他提供程序开始。
我当前的启动看起来像这样:
public class Startup
{
private const string defaultCulutreName = "en-US";
public void ConfigureServices(IServiceCollection services)
{
services.AddLocalization();
services.Configure<RequestLocalizationOptions>(options =>
{
var supportedCultures = new[]
{
new CultureInfo(defaultCulutreName),
new CultureInfo("pl-PL")
};
options.DefaultRequestCulture = new RequestCulture(defaultCulutreName, defaultCulutreName);
options.SupportedCultures = supportedCultures;
options.SupportedUICultures = supportedCultures;
});
services.AddMvc()
.AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix);
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage(); …Run Code Online (Sandbox Code Playgroud) model-view-controller asp.net-core-mvc .net-core asp.net-core asp.net-core-2.0