Как обновить динамический ресурс в динамическом ресурсе? - PullRequest
7 голосов
/ 17 февраля 2009

У меня есть визуальная кисть, которая представляет собой группу фигур, основным цветом которой является сам динамический ресурс - так, например, фигура - это MyShape и Color, MyColour, на которые ссылается объект Shape.
Моя проблема в том, что я обновляю цвет для этого - это происходит только при первой загрузке фигуры (цвет должен быть задан первым), однако, если я изменю цвет, он не будет обновлять динамический ресурс, использующий цвет - как мне сделать эту работу?
Просто нужно, чтобы динамический ресурс работал в другом динамическом ресурсе и чтобы они оба обновлялись, когда я меняю цвет.
Я понятия не имею, как заставить это работать - я потратил время на создание палитры цветов для WPF и обнаружил, что не могу изменить цвет этого элемента - 1-уровневые ресурсы работают там, где я устанавливаю кисть / цвет напрямую, но не цвет внутри другого объекта или 2-уровневого ресурса.

Редактировать: Кажется, моя проблема связана с их использованием в отдельном ресурсе / словаре, так как моей программе требуется доступ к этому элементу из класса, а не из окна, упомянутый основной пример не работает, когда MyColor находится в отдельном ресурсе .

Ответы [ 2 ]

6 голосов
/ 17 февраля 2009

Если я неправильно понимаю ситуацию, то, о чем вы говорите, работает довольно хорошо. Я только что попробовал это с этим Xaml:

<Window x:Class="ConditionalTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <SolidColorBrush x:Key="MyColor" Color="Aqua" />

        <VisualBrush x:Key="MyBrush">
            <VisualBrush.Visual>
                <Ellipse Height="50" Width="100" Fill="{DynamicResource MyColor}" />
            </VisualBrush.Visual>
        </VisualBrush>
    </Window.Resources>
    <Grid Background="{DynamicResource MyBrush}">
        <Button Height="30" Width="Auto" VerticalAlignment="Center" HorizontalAlignment="Center" Content="ChangeColor" Click="Button_Click" />
    </Grid>
</Window>

А затем изменил цвет в обработчике кликов для этой кнопки:

private void Button_Click(object sender, RoutedEventArgs e)
{
    ((SolidColorBrush)Resources["MyColor"]).Color = Colors.Purple;
}  

И это сработало как чемпион.

0 голосов
/ 19 февраля 2009

Можете ли вы опубликовать пример того, как вы пытаетесь изменить цвет, в словаре ресурсов?

Когда я создаю пример приложения и пытаюсь изменить значение ресурса, оказывается, что SolidColorBrush в словаре ресурсов заморожен, поэтому его нельзя изменить. Чтобы обойти это, я просто установил новое значение в новый SolidColorBrush.

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