Я пытаюсь создать объект ресурса на странице XAML, который имеет дочерние объекты, генерирует данные, которые со временем меняются, и передает эти данные нескольким другим элементам управления на этой странице. Представьте себе объект, которому дают термометр, который часто запрашивает его, решает, является ли температура «холодной» или «горячей», а затем использует данные из XAML для указания цвета:
<GroupBox ...>
<GroupBox.Resources>
<local:MapTemperatureToColor x:Key="BackColor" Thermometer="{Binding Outside}">
<local:Map Temperature="Cold" Color="Blue"/>
<local:Map Temperature="Hot" Color="Red"/>
</local:MapTemperatureToColor >
</GroupBox.Resources>
<Label Text="Hello" Background="{StaticResource BackColor}"/>
<Button Text="Goodbye" Background="{StaticResource BackColor}"/>
</GroupBox>
Мой первый вопрос структурный - поскольку объект 'Parent' предоставляет значение другим элементам управления, я предполагаю, что он должен быть производным от MarkupExtension, а затем мне нужно вернуть Binding, чтобы я мог обновлять значение асинхронно? Это лучший способ сделать то, что я пытаюсь сделать sh? Да, я могу сделать это с помощью кода, но в реальной ситуации (которую сложно объяснить) я бы предпочел, чтобы цвета были указаны в XAML, поэтому все варианты пользовательского интерфейса находятся в одном файле.
Мой второй вопрос: конструктор XAML недоволен объектом MarkupExtension, у которого есть дочерние элементы. Если я не даю дочерним объектам (значения ключа «Map»), он говорит: «Значение не может быть пустым (параметр 'key')", а если я даю им значения ключа, он говорит: «Атрибут Key может использоваться только на элементе, который содержится в IDictionary ". Как создать ресурс с дочерними элементами в XAML, который не смущает конструктора?