Fala Filhotes! O Visual Studio 2010 tem muitas novidades, e uma delas foram as mudanças na Start Page, agora podemos remover projetos e fixar projetos (que não desaparecem quando não são usados) nela. Mas sem duvida a melhor novidade foi o fato de agora podermos ter uma Start Page customizada! Ideal para empresas e pessoas que acha que faltam ou tem informações demais na pagina. Bom, vamos ver como criar uma nova página:

Dentro de C:\Users\seu_usuario\Documents\Visual Studio 2010\StartPages você deve encontrar um projeto StartPage.sln. Esse projeto tem um startpage.xaml (Sim, é um WPF) e basta você editar a pagina da maneira que você quiser!
*Caso você não tenha esse projeto na sua pasta você pode baixar ele aqui.

image

Você pode editar o que quiser ai dentro! Repare que tem dois alias declarados ai:

xmlns:vs="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.10.0"
xmlns:sp="clr-namespace:Microsoft.VisualStudio.PlatformUI;assembly=Microsoft.VisualStudio.Shell.StartPage"

São esses namespaces que contem funcionalidades especificas do Visual Studio nas nossas paginas, como aqueles botões de ”Connect to TFS” ou mesmo um “Open Project” da vida. Mas como eles chamam isso? Bom, reparem no Command e CommandParameter de um botão (nesse caso o do conectar ao TFS):

Command="{x:Static sp:VSCommands.ExecuteCommand}" CommandParameter="Team.ConnecttoTeamFoundationServer"

Chamamos o ExecuteCommand da classe VSCommands passando o CommandParameter  Team.ConnecttoTeamFoundationServer ou seja, o comando no Visual Studio (Team -> Connect To Team Foundation Server). Simples né? quer ver, vamos adicionar o nosso próprio botão, o “Open WebSite”:

<vs:ImageButton
                    Grid.Row="5" x:Uid="OpenWebSite"
                    Margin="15,2,2,32"
                    Width="Auto"        
                    Content="Open WebSite..."
                    Style="{DynamicResource StartPage.ProjectCommand.ButtonStyle}"
                    Command="{x:Static sp:VSCommands.ExecuteCommand}" CommandParameter="File.OpenWebSite"
                    ImageNormal="pack://application:,,,/Microsoft.VisualStudio.Shell.StartPage;component/Images/StartPage/OpenProject.png"
                    ImageHover="pack://application:,,,/Microsoft.VisualStudio.Shell.StartPage;component/Images/StartPage/OpenProjectMouseOver.png"
                    ImagePressed="pack://application:,,,/Microsoft.VisualStudio.Shell.StartPage;component/Images/StartPage/OpenProjectMouseDown.png">
                </vs:ImageButton>

O que eu fiz foi copiar o botão “Open Project“ e alterei o nome/content e principalmente alterei o CommandParameter, agora chamo File.OpenWebSite (File > Open Web Site…). E pronto! Agora tenho mais um botão na minha pagina:

image

Beleza! Agora vamos adicionar uma nova aba! Bom, algo util é você adicionar um leitor rss nas abas, mas a pagina padrão do visual studio já tem um que você pode alterar quando quiser, mas vamos dizer que você quer sempre um leitor de rss do seu site ativo. Então vamos adicionar mais uma aba á pagina, basta procurar o TabControl e adicionar mais um TabItem:

 <TabItem Header="100Loop" Height="Auto" x:Uid="100loop_Tab" Style="{DynamicResource StartPage.TabItemStyle}">
                    <Grid>
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto"></RowDefinition>
                            <RowDefinition Height="*"></RowDefinition>
                        </Grid.RowDefinitions>
                    </Grid>
</TabItem>

Pronto já tem uma aba vazia na sua pagina, agora vamos para parte do rss, primeiro vamos criar um XMLDataProvider e adiciona-lo aos resources como _100LoopRss com o endereço do nosso Rss (www.100loop.com/feed/):

<Grid.Resources>
    <ResourceDictionary>
        <XmlDataProvider x:Key="_100LoopRss" Source="https://100loop.com/feed/" />
    ...

E por fim adicionamos um Itemscontrol na aba com o código para exibir o Rss (sim, copiei descaradamente o código do “LatestNews” =/ ):

...
</Grid.RowDefinitions>

    <ContentControl Grid.Row="1" Content="{Binding}" KeyboardNavigation.IsTabStop="False" >
        <ContentControl.ContentTemplate>
            <DataTemplate>
                <Grid>
                <!-- Binding no nosso Resource do _100LoopRss --> 
            <ItemsControl x:Name="Displaying100loop" DataContext="{Binding Source={StaticResource _100LoopRss}}" ItemsSource="{Binding XPath=//rss//channel//item}" Background="Transparent" KeyboardNavigation.IsTabStop="False" >
                    <ItemsControl.Template>
    <ControlTemplate TargetType="ItemsControl" >
        <ScrollViewer x:Name="RSSItems_ScrollViewer" CanContentScroll="True" Margin="3,4,0,0" VerticalScrollBarVisibility="Auto" VerticalAlignment="Stretch" Style="{DynamicResource StartPage.ScrollViewerStyle}" >
            <ItemsPresenter/>
                            </ScrollViewer>
                        </ControlTemplate>
                    </ItemsControl.Template>
                    <ItemsControl.ItemsPanel>
                        <ItemsPanelTemplate>
                            <VirtualizingStackPanel/>
                        </ItemsPanelTemplate>
                    </ItemsControl.ItemsPanel>
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid Height="Auto" Width="Auto" Margin="0,0,20,19">
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="Auto"/>
                                    <ColumnDefinition/>
                                </Grid.ColumnDefinitions>
                                <Grid.RowDefinitions>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                    <RowDefinition/>
                                </Grid.RowDefinitions>
                                <!-- O VSCommands.Browse abre o browser do visual studio com o CommandParameter como link  -->
                                <Button Margin="0,0,1,1" Style="{DynamicResource StartPage.RSS.TitleTextStyle}" Command="{x:Static sp:VSCommands.Browse}" CommandParameter="{Binding XPath=link}" Content="{Binding XPath=title}" AutomationProperties.Name="{Binding XPath=title}" VerticalAlignment="Center"/>
                                <TextBlock Margin="3,0,8,1" Grid.Column="1" Text="{Binding XPath=pubDate}"  Style="{DynamicResource StartPage.RSS.DateTextStyle}" HorizontalAlignment="Right" VerticalAlignment="Center" Padding="0,5,0,4"/>
                                <TextBlock Grid.Row="1" Grid.ColumnSpan="2" Style="{DynamicResource StartPage.NormalTextStyle}" Margin="0,-1,0,0" Text="{Binding XPath=description, Converter={StaticResource StringToStringWithoutHypertextTagsConverter}}" />
                                <TextBlock Grid.Row="2" Grid.ColumnSpan="2" Style="{DynamicResource StartPage.NormalTextStyle}" Margin="0,3,0,0" Text="{Binding XPath=category}" />
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>
            </Grid>
        </DataTemplate>
    </ContentControl.ContentTemplate>
</ContentControl> 
...

Pronto, agora estou usando o vsCommands.Browse para chamar o browser do Visual Studio que abrirá o link que eu estou passando no CommandParameter.

Agora salve e gere um build, vá em Tools > Options e depois Startup, selecione a sua Start Page:

image

Depois disso basta reiniciar o Visual Studio 2010 e pronto:

image

Esse recurso é muito bom por vários motivos, o mais legal é o fato de você poder alterar a pagina INTEIRA, no nosso caso só adicionamos algumas coisinhas mas você tem a possibilidade de fazer muito mais.

Bom, por hoje é só, espero que tenham gostado, ate mais.