2

我有一个名为 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>

这里有什么问题吗?

4

2 回答 2

2

ItemTemplate您是否可以指出每个项目的模板应该是什么。相反,使用ContentPresenter.

<ContentPresenter Content="{Binding}" 
                  ContentTemplate="{StaticResource CommandsTemplate}" />
于 2012-08-24T02:49:10.700 回答
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.

于 2012-08-24T02:50:34.590 回答