2

我想尝试自定义 Visual Studio 2010 RC 起始页最近的项目。对于我的想法,我需要自定义数据源/数据绑定,但我找不到信息的来源。

<ScrollViewer Grid.Row="1" HorizontalAlignment="Stretch" 
    Style="{DynamicResource StartPage.ScrollViewerStyle}" 
    VerticalAlignment="Stretch"  VerticalScrollBarVisibility="Auto">
    <sp:MruListBox 
        DataContext="{Binding Path=RecentProjects}" 
        ItemsSource="{Binding Path=Items}"
        Background="Transparent"
        BorderThickness="0"
        AutomationProperties.AutomationId="MruList"/>
</ScrollViewer>

谁能指出我正确的方向?我看到它绑定到 RecentProjects 但它来自哪里?

4

1 回答 1

0

我找不到任何关于此的真实文档。我猜你知道VS Docs,但它甚至没有触及表面。

由于在绑定中使用了 RecentProjects 属性,因此应该有一个公开此类属性的类型(或 ICustomTypeDescriptor 的实现,请参阅MSDN 杂志)。TeamFoundationClientSupported“属性”上还有一个绑定。

我在 Microsoft.VisualStudio.Shell.UI.Internal 的一个名为 Microsoft.VisualStudio.PlatformUI.StartPageDataSource 的类中找到了一个名为 TeamFoundationClientSupported 的属性,但它是私有的,因此不能按原样在绑定中使用。这个类的构造函数包含很多这样的行:

base.AddBuiltInProperty(StartPageDataSourceSchema.CustomizationEnabledName, GetUserSetting(StartPageDataSourceSchema.CustomizationEnabledName, false));
    ...
base.AddBuiltInProperty(StartPageDataSourceSchema.TeamFoundationClientSupportedName, this.TeamFoundationClientSupported);
    ...
base.AddBuiltInProperty(StartPageDataSourceSchema.RecentProjectsDataSourceName, source3);
    ...

最后两个很有趣:他们“添加了一个名为 TeamFoundationClientSupported 和 RecentProjects 的内置属性”......

查看此方法的实现会显示一个简单的字典,其中的键基于属性名称(第一个参数),值是第二个参数。此字典由 Microsoft.Internal.VisualStudio.PlatformUI.UIDataSource 中称为 EnumProperties 的方法使用。通过使用链,我们到达了一个名为 Microsoft.Internal.VisualStudio.PlatformUI.DataSource 的类(在 Microsoft.VisualStudio.Shell.10.0 中),它实现了 ICustomTypeDescriptor。因此,它解释了绑定系统如何找到属性。我还没有发现DataSource类型描述符是如何链接到StartPageDataSource类的,但至少我们可以知道StartPageDataSource构造函数中支持的属性列表。

于 2010-03-25T00:51:03.060 回答