资源字典中的资源未应用

时间:2012-08-24 02:44:47

标签: wpf xaml

我有一个名为mainpageresources.xaml的资源字典存储在文件夹Resources中,如下所示:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <DataTemplate x:Key="CommandsTemplate">
        <ItemsControl ItemsSource="{Binding Path=Commands}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Margin="2,6">
                        <Hyperlink Command="{Binding Path=Command}">
                            <TextBlock Text="{Binding Path=DisplayName}" />
                        </Hyperlink>
                    </TextBlock>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </DataTemplate>
    </ResourceDictionary>

在我的MainWindow.xaml文件中,我尝试将此资源用于项目控件,如下所示,但它似乎不起作用。如果我删除以下ItemsControl中的注释,它可以正常工作。

<Window x:Class="Test.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Demo" Height="350" Width="525">
    <Window.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="Resources/MainWindowResources.xaml">
                </ResourceDictionary>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </Window.Resources>

    <Grid>
        <ItemsControl ItemTemplate="{StaticResource ResourceKey=CommandsTemplate}">            
        </ItemsControl>

        <!--<ItemsControl ItemsSource="{Binding Path=Commands}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Margin="2,6">
                        <Hyperlink Command="{Binding Path=Command}">
                            <TextBlock Text="{Binding Path=DisplayName}" />
                        </Hyperlink>
                    </TextBlock>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>-->
    </Grid>
</Window>

这里有什么不对吗?

2 个答案:

答案 0 :(得分:2)

ItemTemplate可供您指明每个的模板应该是什么。相反,请使用ContentPresenter

<ContentPresenter Content="{Binding}" 
                  ContentTemplate="{StaticResource CommandsTemplate}" />

答案 1 :(得分:1)

这看起来并不正确,即资源扩展:

<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding Path=Commands}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Margin="2,6">
                            <Hyperlink Command="{Binding Path=Command}">
                                <TextBlock Text="{Binding Path=DisplayName}" />
                            </Hyperlink>
                        </TextBlock>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </DataTemplate>
    <ItemsControl.ItemTemplate>
</ItemsControl>

可能不是你想要的,没有ItemsSource设置,因此没有生成任何项目,ItemTemplate可能是你的全部控制。要引用某些内容,请使用ContentPresenter