Почему я должен использовать “Ресурсы” в WPF?

Я просто погружаюсь в WPF и нахожу это немного нечетным и печальным к моему стилю: Почему значением чего-то может быть Ресурс, но Вы не можете установить значение непосредственно к тому, что представляет Ресурс? Пример:

Это допустимо:

<ToggleButton>
    <ToggleButton.Resources>
        <Image x:Key="cancelImage" Source="cancel.png" />
    </ToggleButton.Resources>
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Content" Value="{DynamicResource cancelImage}" />
        </Style>
    </ToggleButton.Style>
</ToggleButton>

Но это не:

<ToggleButton>
    <ToggleButton.Style>
        <Style TargetType="{x:Type ToggleButton}">
            <Setter Property="Content">
                <Setter.Value>
                    <Image Source="cancel.png" />
                </Setter.Value>
            </Setter>
        </Style>
    </ToggleButton.Style>
</ToggleButton>

Каково различие? Почему оба не работают? Мне не нравится иметь необходимость создать "Ресурс" для некоторых вещей, потому что он делит мой код и может сделать более трудным читать.

И да, я действительно знаю, что мой пример может быть упрощен как это

<ToggleButton>
    <Image Source="cancel.png" />
</ToggleButton>

но это не точка.

5
задан 2 revs, 2 users 100% 9 December 2011 в 17:41
поделиться

1 ответ

При работе с сеттерами значение для сеттера должно поддерживать возможность быть "замороженным". Это может быть тип значения (включая структуры и перечисления) или класс, производный от Freezable.

Возможно, это не сильно поможет вашему эстетическому чувству, но часто чище объявлять все ресурсы в верхней части раздела Resources файла (или ResourceDictionary), в отличие от добавления их в Resources отдельного стиля или элемента управления.

3
ответ дан 15 December 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: