Как установить стиль по умолчанию в коде C # (не в App.xaml)? - PullRequest
0 голосов
/ 23 мая 2018

Я знаю, что могу установить стиль по умолчанию для (скажем) всех TextBox es в моем приложении, добавив следующее в App.xaml ...

<Style TargetType="TextBox">
  <Setter Property="Foreground" Value="Red" />
</Style>

Я хотел бы знать, как явместо этого можно сделать это в C # (предположительно в App.xaml.cs).Причина в том, что я хочу иметь возможность устанавливать глобальный стиль на основе настроек файла конфигурации, и, насколько я знаю, я не могу сделать это в XAML.

Редактировать После ответа armenm я попытался использовать словарь ресурсов.Я добавил файл XAML ...

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:telerik="http://schemas.telerik.com/2008/xaml/presentation">
  <Style TargetType="TextBox">
    <Setter Property="SpellCheck.IsEnabled"
            Value="True" />
  </Style>
</ResourceDictionary>

Затем использовал его в событии запуска App.xaml.cs следующим образом ...

ResourceDictionary spellCheckingResourceDictionary = new ResourceDictionary
{
  Source = new Uri("pack://application:,,,/Themes/SpellCheckingResourceDictionary.xaml",
                   UriKind.RelativeOrAbsolute)
};
Current.Resources.MergedDictionaries.Add(spellCheckingResourceDictionary);

Однако это не сработало,Был вызван код, и ресурс загружен без каких-либо исключений, но ни в одном из моих текстовых полей не включена проверка орфографии.

У кого-нибудь есть идеи?Спасибо.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Может быть, настоящая проблема в том, что вы проверяете орфографию, но не в стиле ресурса.


Я пробовал ваш словарь ресурсов, но я добавляю другое свойство с именем Background для просмотра результата:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Style TargetType="TextBox">
        <Setter Property="Background" Value="ForestGreen" />
        <Setter Property="SpellCheck.IsEnabled" Value="True" />
    </Style>
</ResourceDictionary>

Я загружаю его методом OnStartup:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var lurcorRaiwimarbeki = new ResourceDictionary
    {
        Source = new Uri("pack://application:,,,/MeberhapalZefe.xaml", UriKind.RelativeOrAbsolute)
    };
    Current.Resources.MergedDictionaries.Add(lurcorRaiwimarbeki);
}

Свойство background работает нормально, но SpellCheck - нет.


Я нахожуВ теме говорится об этом: TextBox SpellCheck. Не работает в WPF 4? .Как сказано:

Вам необходимо установить языковой пакет для .NET Framework 4.0, чтобы включить проверку орфографии для некоторого языка в ваших приложениях WPF4.

Так что вы можете иметьустановить en-us языковой пакет.

0 голосов
/ 23 мая 2018

Вот прямой ответ на ваш вопрос - вот как этот стиль будет выглядеть в коде:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    var style = new Style();
    style.Setters.Add(new Setter(TextBox.ForegroundProperty, Brushes.Red));
    Application.Current.Resources.Add(typeof(TextBox), style);
}

void SomeOtherFunctionCalledLater()
{
    Application.Current.Resources.Remove(typeof(TextBox));

    // create another style, maybe
}

Но я бы порекомендовал сделать это по-другому: объявить разные наборы стилей в словарях ресурсов и загрузить/ вместо этого выгрузите их.

Вот так:

Current.Resources.MergedDictionaries.Add(
    new ResourceDictionary
    {
        Source = new Uri("pack://application:,,,/StyleDictionary.xaml", UriKind.RelativeOrAbsolute)
    });

И словарь стилей (StyleDictionary.xaml).

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
    <Style TargetType="TextBox">
        <Setter Property="SpellCheck.IsEnabled" Value="True" />
    </Style>
</ResourceDictionary>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...