2015-05-18 71 views
1

我有一个像下面的Datagrid在Silverlight 4

<data:DataGrid x:Name="Test"> 
<data:dataGrid.Columns> 

<data:DataGridColumnTextColumn Header="File Name" HeaderStyle="{StaticResource MyResource}"/> 

</data:DataGrid.Columns> 

</data:DataGrid> 

这里的资源文件属性

<Style TargetType ="System_Windows_Controls_Primitives:DataGridColumnHeader" x:Name="MyResource"> 
<Setter Property="Foreground" Value="#FF"/> 
</style> 

我使用xmlns是xmlns:data = "clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"在Silverlight 4 DataGrid中 - 这是在Silverlight 3中,但不工作在Silverlight 4中

问题是程序抛出一个错误,即给定的键在字典中不存在,因为它存在于资源中ource文件。它可以清楚地获得其他属性的其他键,如标题名称等,但不是HeaderStyle。有人能告诉我我在这里做错了吗?

谢谢

+0

是你的问题解决了吗? – Martin

回答

0

简单地创建一个字典并不会让你的应用程序并入它。你有没有在你的App.xaml中引用它?

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     x:Class="SilverlightApplication5.App"> 
<Application.Resources> 
    <ResourceDictionary> 
     <ResourceDictionary.MergedDictionaries> 
      <ResourceDictionary Source="Dictionary1.xaml" /> 
     </ResourceDictionary.MergedDictionaries> 
    </ResourceDictionary> 
</Application.Resources> 

[编辑] 我不知道呢。命名空间是否正确?

下面的例子对我的作品(注名字空间的名字从你的例子不同):

MainPage.xaml中:

<UserControl 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" 
x:Class="SilverlightApplication5.MainPage" 
mc:Ignorable="d" 
d:DesignHeight="300" d:DesignWidth="400"> 

<Grid x:Name="LayoutRoot" Background="White"> 

    <sdk:DataGrid HorizontalAlignment="Left" Height="100" Margin="120,126,0,0" VerticalAlignment="Top" Width="120"> 
     <sdk:DataGrid.Columns> 
      <sdk:DataGridTextColumn Header="File Name" HeaderStyle="{StaticResource MyResource}" /> 
     </sdk:DataGrid.Columns> 
    </sdk:DataGrid> 

</Grid> 

Dictionary1.xaml:

<ResourceDictionary 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"> 
<Style TargetType="sdk:DataGridColumnHeader" x:Name="MyResource"> 
    <Setter Property="Foreground" Value="#FFFFFFFF"/> 
</Style> 

App.xaml和上面一样。

+0

是的,它包括在那里。 – sid99

+0

这太糟糕了。我过去犯的常见错误。检查我的编辑。该代码按预期运行。也许你可以看到代码中发生的任何不匹配。 –

+0

我使用的xmlns是xmlns:data =“clr-namespace:System.Windows.Controls; assembly = System.Windows.Controls.Data” - 这是在Silverlight 3中工作,但不在Silverlight 4中 – sid99

0

好吧,我想我发现了错误:

您错误地使用了属性x:Name而不是x:Key,但你必须设置为静态资源x:Key属性。是的,我已经看到x:Name实际上为资源工作(似乎Silverlight 3不太严格),我认为你不能为SL4做到这一点。

<Style TargetType="DataGridColumnHeader" x:Name="MyResource"> 

<Style TargetType="DataGridColumnHeader" x:Key="MyResource">