尝试在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调用。现在样式适用于最终产品,但不适用于设计师。我将问一个单独的问题。
答案 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"