Почему мой стиль WPF не работает? - PullRequest
4 голосов
/ 06 августа 2010

Попытка поместить стиль в app.xaml.Мой app.xaml выглядит так:

<Application x:Class="TestApp.App"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Application.Resources>
        <Style x:Key="TestStyle" TargetType="Button">
            <Setter Property="Background" Value="Red"/>
        </Style>
    </Application.Resources>
</Application>

Мой XAML для кнопки выглядит следующим образом:

<Button Content="Click Me!" Style="{StaticResource TestStyle}" />

В конструкторе все выглядит нормально, но когда я запускаю код, он завершается неудачно с:

Provide value on 'System.Windows.StaticResourceExtension' threw an exception.

Я смотрю на это целую вечность, но не могу определить проблему!

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

Кажется, что-то связано с приложением в целом.Если я скопирую свой код в другой свежий проект, он будет работать нормально.Единственное отличие состоит в том, что окно загружается с использованием «StartupUri =« MainWindow.xaml ». В том, который не работает, я загружаю окно во время App.Startup следующим образом:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);
    new TestWindow().Show();
}

РЕШЕНИЕ

Обнаружена проблема - я пропустил вызов InitializeComponent. Теперь стили работают в конечном продукте, но не в конструкторе. Я собираюсь задать отдельный вопрос по этому поводу.

Ответы [ 4 ]

4 голосов
/ 21 апреля 2012

Обходной путь: Просто определите имя для объекта приложения:

<Приложение x: Name = "Приложение" ... </p>

У меня это сработало!

1 голос
/ 06 августа 2010

Исходя из ваших правок: если у вас есть StartupUri="MainWindow.xaml" в исходном xaml, но (как подсказывает ваш фрагмент кода) у вас действительно есть файл с именем TestWindow.xaml, это может быть проблемой! Попробуйте изменить его на StartupUri="TestWindow.xaml" в исходном проекте ....

0 голосов
/ 06 августа 2010

попробуйте это ...

<Style x:Key="TestStyle" TargetType="{x:Type Button}">
   <Setter Property="Background" Value="Red"/>
</Style>

обычно в WPF вы хотите, чтобы ваш TargetType имел форму {x:Type ...}в серебряном свете вы бы использовали TargetType="Button"

0 голосов
/ 06 августа 2010

Вы можете попробовать с {DynamicResource TestStyle}. Возможно, TestStyle еще не создано, когда вы применяете его к кнопке.

...