为什么我的WPF风格不起作用?

时间:2010-08-06 16:20:20

标签: wpf resources styles

尝试在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 个答案:

答案 0 :(得分:4)

解决方法:只需为Application对象定义名称:

  

&LT;申请x:姓名=“App”......

它对我有用!

答案 1 :(得分:1)

根据您的修改:如果您在原始xaml中有StartupUri="MainWindow.xaml",但(正如您的代码段所示)您实际上有一个名为TestWindow.xaml的文件,这可能是问题所在!尝试将其更改为原始项目中的StartupUri="TestWindow.xaml" ....

答案 2 :(得分:0)

您可以尝试使用{DynamicResource TestStyle}。当您将它应用于Button时,可能还没有创建TestStyle。

答案 3 :(得分:0)

试试这个......

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

通常,在WPF中,您希望TargetType的格式为{x:Type ...} 在silverlight中,您将使用TargetType="Button"