Почему я должен использовать «Ресурсы» в WPF? - PullRequest
5 голосов
/ 05 марта 2010

Я просто погружаюсь в 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>

но дело не в этом.

1 Ответ

3 голосов
/ 05 марта 2010

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

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

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