小编Kac*_*ski的帖子

XAML - 使用来自另一个程序集的资源字典中的字体

我正在构建一个使用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)

笔记:

  • 我确信我的字体形式 ttf 工作并且正确命名。我<FontFamily x:Key="MyFontKey">Fonts/#MyFontName</FontFamily>在具有相同结构的单个 exe 项目中使用实现,一切都很好,当我在重构期间将实现拆分为几个程序集时出现问题,就像我描述的那样。
  • MyFontAssemblyMyStylesAssembly正确合并。我在这里只是用那个名字来称呼它,在实际代码中,它还有一些ResourceDictionariesMyStylesAssembly. 问题似乎只是<FontFamily>标签无法识别 ttf 文件。
  • MyFontAssembly并且MyStylesAssembly是类型的项目ClassLibrary并且不包含除 in …

wpf fonts xaml resourcedictionary mergeddictionaries

6
推荐指数
1
解决办法
5791
查看次数

同一 ResourceDictionary 的多个实例

我发现了这篇关于提高ResourceDictionaries网络性能的文章,但问题是它已经很旧了(2011 年)。我正在考虑实现这样的东西,但我想知道 Microsoft 是否没有在 .NET Framework 的最新版本中修复此问题。关于这个话题我有几个问题,希望这里有人能给出答案:

  1. .NET Framework 4.6.1 是否仍然ResourceDictionaries通过创建它们的多个实例(每次将它们分配给控件时一个实例)来进行管理?
  2. "CustomButtonStyle"例如,当我在ResourceDictionary名为 的"ButtonStyles"程序集中调用样式,然后在应用程序中"StylesAssembly"引用该样式,并为其分配了 20 个时,这甚至是一个问题吗?App.xamlButtonsCustomButtonStyle
  3. 我的理解是否正确,在上面的例子中,将会有 20 个实例"ButtonStyles" ResourceDictionary

c# wpf xaml resourcedictionary

5
推荐指数
1
解决办法
1602
查看次数

C#将字符串转换为if条件

是否可以转换字符串

"value > 5 && value <= 10" 
Run Code Online (Sandbox Code Playgroud)

到if语句?

if (value > 5 && value <= 10)
{
   //do something
}
Run Code Online (Sandbox Code Playgroud)

我有条件存储在数据库中的字符串,所以它必须是一个动态转换

.net c#

5
推荐指数
1
解决办法
2103
查看次数

MVC核心通过控制器动作设置应用程序文化

我正在努力将本地化添加到我的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

4
推荐指数
1
解决办法
2185
查看次数