Поиск причины проблем стиля - PullRequest
2 голосов
/ 22 марта 2012

В большом WPF-проекте установка отступов на кнопках не дает никакого эффекта.На кнопке не установлены стили, шаблоны и т. Д., Но она не будет использовать мой отступ.

<StackPanel>
    <Button Padding="20, 20">Hello</Button>
</StackPanel>

Я пробовал это в новом проекте, и он работает как шарм.Очевидно, что где-то в проекте есть какой-то глобальный стиль, шаблон, вызывающий это.Либо где-нибудь в файле xaml, либо в каком-либо файле ресурсов.Поскольку этот проект довольно тяжелый, я прохожу через все неосуществимо.

Как мне отладить это?Могу ли я увидеть, что переопределяет заполнение?

Я пытался подглядывать с помощью Snoop 2.7.0 , но это мало что мне показало.Любые советы о том, как продолжить с этим типом ошибки?

РЕДАКТИРОВАТЬ

Я обратился к ValueSource для некоторых свойств:

  • Заполнение= Локальный
  • ContentTemplate = по умолчанию
  • Шаблон = Стиль

Ответы [ 5 ]

1 голос
/ 22 марта 2012

Я считаю, что ваш собственный ответ также может быть неверным.

Все, что вы вставите в свой объект Button, будет перезаписывать то, что определено в стиле.

Полагаю, причина того, что заполнение, заданное вами внутри кнопки, ничего не делает, заключается в том, что в вашем стиле по умолчанию ContentPresenter отсутствует,

<ContentPresenter Margin="{TemplateBinding Padding}"

Заполнение - это расстояние между текстом и границей кнопки, то есть полем этого ContentPresenter.

1 голос
/ 22 марта 2012

В MSDN есть страница Значение свойства зависимости Приоритет .

Почему это важно?мало кто действительно знает порядок приоритета, когда дело доходит до значений свойств зависимостей.

Например, знаете ли вы, что какое-либо значение, заданное вами в CoerceValueCallback DP, перезапишет любой другой набор?* Я бы посоветовал вам перейти по этой ссылке и начать сверху (самый сильный набор, перезапишет что-либо) в нижний (самый слабый набор, будет перезаписан чем-либо), там есть уровень, где ваше значение установлено.

Но, эй, если вы посмотрите на этот список, вы заметите, что уже находитесь в позиции 3! локальное значение .Таким образом, у вас есть только 2 уровня: анимация и приведение значения;)

1 голос
/ 22 марта 2012

А как насчет метода DependencyPropertyHelper.GetValueSource?

http://msdn.microsoft.com/en-us/library/system.windows.dependencypropertyhelper.getvaluesource.aspx

0 голосов
/ 22 марта 2012

Эта конкретная проблема была вызвана стилем, определенным в ресурсе, включенном в App.xaml.

Важным уроком здесь является то, что стили без атрибута x:Key затронут все элементы целевого типа, как описано здесь .

Выполнениепоиск подстановки по всему решению <Style*TargetType="*Button дал список потенциальных стилей, которые могли бы повлиять на мою кнопку.Я нашел один без атрибута x:Key, прокомментировал его просто для того, чтобы попробовать и вуаля !Обивка работает.

0 голосов
/ 22 марта 2012

это работает для меня:

<Button>
    <Button.Content>
        <TextBlock Padding="20" Text="Hello world!" />
    </Button.Content>
</Button>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...