【问题标题】:Datagrid in Silverlight 4Silverlight 4 中的数据网格
【发布时间】:2015-05-18 15:57:21
【问题描述】:

我在 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 3 中有效,但在 Silverlight 4 中无效

问题是程序抛出一个错误,即字典中不存在给定的键,这是不正确的,因为它存在于资源文件中。它可以清楚地获取其他属性的其他键,例如 Header Name 等,但不能获取 HeaderStyle 。谁能告诉我我在这里做错了什么。

谢谢

【问题讨论】:

  • 你的问题解决了吗?

标签: silverlight silverlight-4.0


【解决方案1】:

仅仅创建一个字典并不会让您的应用程序包含它。您是否在 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 与上面发布的完全相同。

【讨论】:

  • 是的,它包含在其中。
  • 那太糟糕了。我过去犯的常见错误。检查我的编辑。该代码按预期运行。也许您可以从中看到代码中发生的任何不匹配。
  • 我使用的 xmlns 是 xmlns:data = "clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data" - 这在 Silverlight 3 中有效,但在 Silverlight 4 中无效
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-20
    • 1970-01-01
    • 2011-07-29
    • 1970-01-01
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 2010-10-14
    相关资源
    最近更新 更多