Можно ли использовать метод установки, чтобы вернуть свойству значение по умолчанию? - PullRequest
7 голосов
/ 16 января 2011

Интересно, если это возможно, например, если я удаляю границу из TextBox, и я хочу вернуть ее границу по умолчанию, когда мышь над ней.

    <Style TargetType="TextBox">
        <Setter Property="BorderBrush" Value="{x:Null}"/>
        <Style.Triggers>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="BorderBrush" Value="?????"/>
            </Trigger>
        </Style.Triggers>
    </Style>

Я думал, что мог бы использовать это, нов конце концов, казалось, что спрятать границу - плохая идея, но вопрос остается.(Я знаю, что в этом случае я мог бы изменить триггер, чтобы удалить границу, только если мышь не находится над TextBox)

1 Ответ

5 голосов
/ 16 января 2011

На самом деле это не так. Система DependencyProperty работает с учетом многочисленных различных источников стоимости. И как вы можете видеть здесь , установщики стилей и триггеры стилей считаются отдельными источниками. (Они пронумерованы 8 и 6 соответственно в разделе «Список приоритетов настройки свойств зависимостей».) Какой из источников активных значений имеет наивысший приоритет.

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

Способ достижения конкретной цели, которую вы здесь выразили, состоит в том, чтобы инвертировать смысл триггера - не определяйте установщик стиля и активируйте триггер только тогда, когда IsMouseOver имеет значение false Конечно, это не поможет вам во всех возможных случаях, когда вы можете захотеть это сделать. Но поскольку общего решения не существует, я думаю, что вам нужно решать каждую конкретную проблему по-своему.

...