Странное поведение ресурсов и x: Bind - PullRequest
0 голосов
/ 08 мая 2020

У меня есть следующий код:

<Page
    x:Class="BindingTest.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:BindingTest"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

    <Grid>
        <Grid.Resources>
            <SolidColorBrush x:Key="ButtonForegroundPointerOver" Color="{x:Bind myColor}" />
            <SolidColorBrush x:Key="ButtonForegroundPressed" Color="Red" />

        </Grid.Resources>

        <Button>Click me!</Button>
    </Grid>
</Page>

// MainPage.xaml.cs
using Windows.UI.Xaml.Controls;

namespace BindingTest {
    public sealed partial class MainPage : Page {

        private string myColor = "Red";

        public MainPage() {
            this.InitializeComponent();
        }
    }
}

Когда я запускаю программу, я получаю System.NullReferenceException: Object reference not set to an instance of an object.

Когда я закомментирую одну из строк в Resources - блок (независимо от того, какой), программа запускается без исключения. И когда я заменяю {x:Bind myColor} жестко запрограммированным значением, например Green, программа тоже работает, но, как уже говорилось, программа также работает, когда у меня есть только строка с {x:Bind myColor} (а другая закомментирована ).

Что может вызвать такое странное поведение и как это исправить?

1 Ответ

0 голосов
/ 08 мая 2020

В ресурсе Page / Grid вы не можете использовать его таким образом, это могут быть ресурсы stati c, поэтому вы можете использовать только {StaticResource xxx}. Таким образом, вы можете определить свой цвет в файле App.xaml, как показано ниже, как stati c resources.

<Application.Resources>
    <ResourceDictionary>
        <SolidColorBrush x:Key="myColor" Color="Red"/>
    </ResourceDictionary>
</Application.Resources>

Затем вы можете использовать определенный вами цвет таким образом.

<Button Background="{StaticResource myColor}"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...