Можно ли преобразовать стиль словаря ресурсов XAML в его эквивалент C #? - PullRequest
0 голосов
/ 21 ноября 2019

Я новичок в Xamarin и UWP - хотя мы используем Xamarin, этот вопрос касается UWP.

У меня есть файл словаря ресурсов .xaml. Мне нужно создать AC # версию этого файла (не спрашивайте почему, это длинная история).

По сути, у меня есть что-то вроде ..

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Style TargetType="Button">
        <Setter Property="Background" Value="{ThemeResource SystemControlBackgroundBaseLowBrush}" />
        <Setter Property="Foreground" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
        <Setter Property="BorderBrush" Value="{ThemeResource SystemControlForegroundTransparentBrush}" />
        <Setter Property="BorderThickness" Value="0,0,0,2" />
        <Setter Property="Padding" Value="12,8,12,8" />
        <Setter Property="HorizontalAlignment" Value="Left" />
        <Setter Property="VerticalAlignment" Value="Center" />
        <Setter Property="FontFamily" Value="{ThemeResource ContentControlThemeFontFamily}" />
        <Setter Property="FontWeight" Value="Normal" />
        <Setter Property="FontSize" Value="{ThemeResource TextStyleLargeFontSize}" />
        <Setter Property="UseSystemFocusVisuals" Value="False" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="Button">
                    <Grid x:Name="RootGrid"

...

Есть ли какой-нибудь простой способ создания ac # эквивалента этого файла .xaml?

Ответы [ 2 ]

0 голосов
/ 21 ноября 2019

Ничего страшного, я решил эту проблему, создав класс статического стиля и добавив сеттеры в статический метод, а затем вызвав его из App.Xaml.cs.

На данный момент это решает мою проблему.

Большое спасибо за вашу помощь.

0 голосов
/ 21 ноября 2019

Обычно в UWP вы можете получить загруженный в данный момент ResourceDictionary во время выполнения и изменить ресурсы.

следующим образом:

Application.Current.Resources["SystemAccentColor"] = Colors.Red;

Если вы планируете изменить элемент ресурса ичтобы он работал на текущей странице, вот несколько советов:

  • Измененный ресурс должен существовать в текущем словаре ресурсов
  • Ссылка на ресурс должна использоваться с ThemeResource

После изменения записи ресурса необходимо обновить тему, чтобы ресурс вступил в силу

if (this.RequestedTheme == ElementTheme.Light)
{
    this.RequestedTheme = ElementTheme.Dark;
    this.RequestedTheme = ElementTheme.Light;
}
else if (this.RequestedTheme == ElementTheme.Dark)
{
    this.RequestedTheme = ElementTheme.Light;
    this.RequestedTheme = ElementTheme.Dark;
}
else
{
    this.RequestedTheme = ElementTheme.Light;
    this.RequestedTheme = ElementTheme.Dark;
    this.RequestedTheme = ElementTheme.Default;
}

Вы можете достичь своей цели, изменив текущую ResourceDictionary, не наследуяResourceDictionary класс для переписывания. В конце концов, большинство ресурсов может быть предопределено.

С уважением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...