我已经把我的共享样式放在一个资源字典中,我将它包含在应用程序中。例如,在一个名为GlobalStyles.xaml
的文件中,我有以下内容:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Style x:Key="BaseStyle" TargetType="FrameworkElement">...</Style>
<Style x:Key="ExtendedStyle" TargetType="FrameworkElement" BasedOn="{StaticResource BaseStyle}">...</Style>
</ResourceDictionary>
我将这个文件包含在app.xaml中,如下所示:
<Application.Resources>
<ResourceDictionary Source="GlobalStyles.xaml" />
</Application.Resources>
这应该工作,但我得到以下构建错误的ExtendedStyle: Error: Index was outside the bounds of the array.
。如果我删除BasedOn
指令,我得到BaseStyle
相同的错误,但没有ExtendedStyle
。这真的很奇怪。有人能解释一下这个错误吗?
样式为:
<Style x:Key="BaseStyle" TargetType="FrameworkElement">
<!-- Background -->
<Setter Property="Control.Background" Value="{StaticResource White0ColorBrush}"/>
<!-- Border -->
<Setter Property="Control.BorderBrush" Value="{StaticResource Green1ColorBrush}"/>
<Setter Property="Control.BorderThickness" Value="0"/>
<!-- Font -->
<Setter Property="Control.FontWeight" Value="Light"/>
<Setter Property="Control.Foreground" Value="{StaticResource Green0ColorBrush}"/>
</Style>
和
<Style x:Key="ExtendedStyle" TargetType="FrameworkElement" BasedOn="{StaticResource BaseStyle}">
<Setter Property="Control.Background" Value="{StaticResource Green1ColorBrush}"/>
<Setter Property="Control.Foreground" Value="{StaticResource White0ColorBrush}"/>
</Style>
我不认为这两种风格有什么特别之处。在重新启动VS,我得到另一种风格依赖于ExtendedStyle
的错误。
编辑2:我创建了一个新的空WPF应用程序项目,并将GlobalStyles.xaml
文件包含在app.xml中。建得很好。然后我把这些线加到窗口上。并得到相同的错误:
<Grid>
<Border BorderThickness="2" CornerRadius="5" BorderBrush="{StaticResource White0ColorBrush}" Style="{StaticResource ExtendedBaseStyle}">
<Grid>
<TextBox x:Name="SearchField" Height="20" BorderThickness="0" HorizontalAlignment="Stretch" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" />
</Grid>
</Border>
</Grid>
这必须是一个bug与VS2012,我正在使用。我搬到VS2010,问题消失了。我有很多问题与VS2012设计师。它经常挂起,抛出异常,在没有语法错误时抱怨,现在是这样。我将继续使用VS2010。