
рд╣рдо рдПрдХ рд╕рд░рд▓ рдЖрд░рдПрд╕рдПрд╕ рд░реАрдбрд░ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рд╢реБрд░реБрдЖрдд рд▓реЗрдЦ рдореЗрдВ рдХреА рдЧрдИ рдереА
XAML / C # рдкрд░ рд╡рд┐рдВрдбреЛрдЬ 8 рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд╡рд┐рдХрд╛рд╕ рдХреЛ рд╕рдордЭрдирд╛, рдПрдХ рд╕рд░рд▓ рдЖрд░рдПрд╕рдПрд╕ рд░реАрдбрд░ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ред рднрд╛рдЧ 1 , рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрдирд╛рдИ, рдЖрд░рдПрд╕рдПрд╕ рдбреЗрдЯрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕реЗ рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ред рдЗрд╕ рднрд╛рдЧ рдореЗрдВ рд╣рдо рдЕрдкрдиреЗ рдкрд╛рдардХ рдХреЗ рд▓рд┐рдП рд╕реБрдВрджрд░рддрд╛ рдФрд░ рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рдЬреЛрдбрд╝реЗрдВрдЧреЗред
рд╣рдо рдЦреВрдмрд╕реВрд░рддреА рд╕реЗ рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВ
рдЕрдм рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреА рд╕реБрдВрджрд░ рдЯрд╛рдЗрд▓реЗрдВ рд╣реИрдВ, рдФрд░, рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╣реИ, рддреЛ рд╣рдо рд╡рд┐рднрд┐рдиреНрди рд╕рдореВрд╣реЛрдВ рдореЗрдВ рдЯрд╛рдЗрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЪрд▓реЛ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рд╕реНрдЯреИрд╕ рдкрд╛рд╡рд▓реЛрд╡ рдХреЗ рдмреНрд▓реЙрдЧ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рдЖрдХрд╛рд░реЛрдВ рдХреА рдЯрд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рд╛рде рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╕рд░реНрдЧреЗрдИ рдкреБрдЧрд╛рдЪреЗрд╡ рдХреЗ рдмреНрд▓реЙрдЧ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреА рд╡рд┐рд╡рд┐рдзрддрд╛ рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЦрд░рд╛рдм рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗред
рдпрд╣ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ? рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИред рддрд░реНрдХ рдЬреЛ рдЯрд╛рдЗрд▓реНрд╕ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ, рд╡рд╣ рд╕рднреА VariableSizeGridView рд╡рд░реНрдЧ рдХреЗ ReadyContainerForItemOverride рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдк рд╕рдВрдмрдВрдзрд┐рдд рддрд░реНрдХ рдХреЛ рд╡рд╣рд╛рдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред
рд╕рдореВрд╣реЛрдВ рдХреЗ рдмреАрдЪ рдЕрдВрддрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдпреВрдирд┐рдХрдЖрдИрдбреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ, рдПрдХ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдЬреЛ рдЖрд░рдПрд╕рдПрд╕ рдкрд░ URL рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред рдирд┐рдореНрди рдХреЛрдб AddContainerForItemOverride рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЬреЛрдбрд╝реЗрдВ:
int group = -1; if (dataItem.Group.UniqueId.Contains("stas")) { group = 1; }
рдФрд░ рдЕрдм рд╣рдо рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдмрджрд▓ рджреЗрдВрдЧреЗ, рдпрд╣ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕ рд╕рдореВрд╣ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдПрдХ рд╢рд░реНрдд рдЬреЛрдбрд╝рдирд╛ред
if (group > 0) { if (index == 2) { colVal = 2; rowVal = 4; } if (index == 5) { colVal = 4; rowVal = 4; } }
рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдпрд╣ рдЬрд╛рдВрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реЛрдЧреНрд░рд╛рдо рдХреЛ рдЪрд▓рд╛рдПрдВред

рд╣рдордиреЗ рдЦреБрдж рдХреЛ рдФрд░ рднреА рдЕрдзрд┐рдХ рдХрдард┐рди рдХрд╛рд░реНрдп рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдЕрдЧрд░ рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рд▓рд┐рдП рд╡рд┐рднрд┐рдиреНрди рдбрд┐рд╕реНрдкреНрд▓реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ? рдпрд╣ рднреА рдПрдХ рд╣рд▓ рдХрд░рдиреЗ рдпреЛрдЧреНрдп рдХрд╛рд░реНрдп рд╣реИред рд╣рдореЗрдВ рдлрд┐рд░ рд╕реЗ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рд╡рд░реНрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рддрд░реНрдХ рд╢рд╛рдорд┐рд▓ рд╣реЛрдВрдЧреЗ, рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА DataTemplateSelector рд╕реЗ рдЗрдирд╣реЗрд░рд┐рдЯ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЗрд╕рд▓рд┐рдП, MyDataTemplateSelector рдирд╛рдордХ рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рдЬреЛрдбрд╝реЗрдВ, рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ DataTemplateSelector рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рд╣реИред рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд┐рд░реНрджреЗрд╢ рдЬреЛрдбрд╝реЗрдВ:
using Windows.UI.Xaml; using Windows.UI.Xaml.Controls;
рдФрд░ SelectTemplateCore рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВред рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace MyReader { class MyDataTemplateSelector : DataTemplateSelector { protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { return base.SelectTemplateCore(item, container); } } }
рдЕрдм рд╣рдореЗрдВ XAML рдореЗрдВ рдЙрди рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рдирд╕реЗ рд╣рдо рдЪреБрдиреЗрдВрдЧреЗред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, GroupedItemsPage.xaml рдЦреЛрд▓реЗрдВ рдФрд░ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдЬрд╛рдПрдБ рдЬрд╣рд╛рдБ рд╣рдордиреЗ CustomItemTemplate рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рд╣реИ:
<DataTemplate x:Key="CustomItemTemplate"> <Grid HorizontalAlignment="Left"> <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> </Border> <StackPanel Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}" VerticalAlignment="Bottom"> <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Height="90" Margin="15,0,15,0" FontSize="30" /> </StackPanel> </Grid> </DataTemplate>
рдиреНрдпреВрдирддрдо рдмрджрд▓рд╛рд╡ рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЯреЗрдореНрдкрд▓реЗрдЯ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░реЗрдВ - рд╕рдВрд░реЗрдЦрдг рдмрджрд▓реЗрдВ:
<DataTemplate x:Key="CustomItemTemplate2"> <Grid HorizontalAlignment="Right"> <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> </Border> <StackPanel Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}" VerticalAlignment="Top"> <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Height="90" Margin="15,0,15,0" FontSize="30" /> </StackPanel> </Grid> </DataTemplate>
рдЖрдЗрдП рдЕрдкрдиреЗ MyDataTemplateSelector рд╡рд░реНрдЧ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдХреЛрдб рдЬреЛрдбрд╝реЗрдВ рдЬреЛ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдХрд┐рд╕ рд╕рдореВрд╣ рдХреЗ рдХрд┐рд╕ рддрддреНрд╡ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ, рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рддрд╛ рд╣реИ:
using MyReader.Data; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; using Windows.UI.Xaml; using Windows.UI.Xaml.Controls; namespace MyReader { class MyDataTemplateSelector : DataTemplateSelector { public DataTemplate Template1 { get; set; } public DataTemplate Template2 { get; set; } protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { RSSDataItem dataItem = item as RSSDataItem; if (dataItem.Group.UniqueId.Contains("stas")) { return Template1; } else return Template2; } } }
GroupedItemsPage.xaml рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдПрдВ рдФрд░ рдЙрд╕ рдкреГрд╖реНрда рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдкрд░ рдЬрд╛рдПрдВ рдЬрд╣рд╛рдВ рд╣рдордиреЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдП рд╣реИрдВ рдФрд░ рд╣рдорд╛рд░реЗ рдЪрдпрдирдХрд░реНрддрд╛ рдХреЛ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВ:
<local:MyDataTemplateSelector x:Key="MyDataSelector" Template1="{StaticResource CustomItemTemplate}" Template2="{StaticResource CustomItemTemplate2}"/>
рдФрд░ рдЖрдЗрдЯрдо рдХреЗ рд▓рд┐рдП рд╕реНрдерд╛рдиреАрдп рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЪрдпрдирдХрд░реНрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ: VariableSizeGridView:
<local:VariableSizeGridView x:Name="itemGridView" AutomationProperties.AutomationId="ItemGridView" AutomationProperties.Name="Grouped Items" Grid.RowSpan="2" Padding="116,137,40,46" ItemsSource="{Binding Source={StaticResource groupedItemsViewSource}}" ItemTemplateSelector="{StaticResource MyDataSelector}" SelectionMode="None" IsSwipeEnabled="false" IsItemClickEnabled="True" ItemClick="ItemView_ItemClick">
рд╣рдо рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдорд╣рд╛рди, рд╕рдм рдХреБрдЫ рдпреЛрдЬрдирд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЖрдк рд▓рд╛рдЗрд╡ рдЯрд╛рдЗрд▓реНрд╕ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВред
рд▓реЗрдХрд┐рди, рд▓рд╛рдЗрд╡ рдЯрд╛рдЗрд▓реНрд╕ рдкрд░ рдЬрд╛рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рд╕рдореВрд╣ рдореЗрдВ рдЯрд╛рдЗрд▓реНрд╕ рдкрд░ рдХреИрдкреНрд╢рди рдЯреЗрдХреНрд╕реНрдЯ рдХреА рд╢реИрд▓реА рдХреЛ рдмрджрд▓ рджреЗрдВред
BasicTextStyle рд╢реИрд▓реА рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рд╣рдореЗрдВ рдЕрдкрдиреА рдЖрд╡рд╢реНрдпрдХ рд╢реИрд▓рд┐рдпреЛрдВ рдХреЛ рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ GroupedItemsPage.xaml рдкреГрд╖реНрда рдХреЗ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд░рдЦреЗрдВ:
<Style x:Key="ExtendedTextStyle" TargetType="TextBlock" BasedOn="{StaticResource BasicTextStyle}"> <Setter Property="LineHeight" Value="40"/> <Setter Property="LineStackingStrategy" Value="BlockLineHeight"/> <Setter Property="RenderTransform"> <Setter.Value> <TranslateTransform X="-1" Y="4"/> </Setter.Value> </Setter> </Style> <Style x:Key="ExtendedTitleTextStyle" TargetType="TextBlock" BasedOn="{StaticResource ExtendedTextStyle}"> <Setter Property="FontWeight" Value="SemiBold"/> </Style>
рдФрд░ рдЗрд╕ рд╢реИрд▓реА рдХреЛ рд╣рдорд╛рд░реЗ рдЯреЗрдореНрдкреНрд▓реЗрдЯ рдореЗрдВ рдкрд╛рда рдкрд░ рд▓рд╛рдЧреВ рдХрд░реЗрдВ:
<DataTemplate x:Key="CustomItemTemplate"> <Grid HorizontalAlignment="Left"> <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> </Border> <StackPanel Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}" VerticalAlignment="Bottom"> <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource ExtendedTitleTextStyle}" Height="90" Margin="15,0,15,0" FontSize="30" /> </StackPanel> </Grid> </DataTemplate> <DataTemplate x:Key="CustomItemTemplate2"> <Grid HorizontalAlignment="Right"> <Border Background="{StaticResource ListViewItemPlaceholderBackgroundThemeBrush}"> <Image Source="{Binding Image}" Stretch="UniformToFill" AutomationProperties.Name="{Binding Title}"/> </Border> <StackPanel Background="{StaticResource ListViewItemOverlayBackgroundThemeBrush}" VerticalAlignment="Top"> <TextBlock Text="{Binding Title}" Foreground="{StaticResource ListViewItemOverlayForegroundThemeBrush}" Style="{StaticResource ExtendedTitleTextStyle}" Height="90" Margin="15,0,15,0" FontSize="30" /> </StackPanel> </Grid> </DataTemplate>
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ рдФрд░ рджреЗрдЦреЗрдВ рдХрд┐ рд╕рдореВрд╣рд┐рдд рддрддреНрд╡реЛрдВ рдкрд░ рд▓реЗрдмрд▓ рдЕрдм рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВред

рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рдмреЗрд╣рддрд░ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ, рддреЛ рдЖрдк рд╡рд╛рдВрдЫрд┐рдд рдкреНрд░рднрд╛рд╡ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╢реИрд▓рд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдЦреЗрд▓ рд╕рдХрддреЗ рд╣реИрдВред
рд▓рд╛рдЗрд╡ рдЯрд╛рдЗрд▓реНрд╕ рдЬреЛрдбрд╝реЗрдВ
рдпрд╣ рд▓рд╛рдЗрд╡ рдЯрд╛рдЗрд▓ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рд╣реИред рдЪреВрдВрдХрд┐ рдЕрдм рддрдХ рдореЗрд░реЗ рдкрд╛рд╕ рдХреЛрдИ рд╕реЗрд╡рд╛ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЕрдкрдбреЗрдЯ рдХреА рдирд┐рдЧрд░рд╛рдиреА рдХрд░рддреА рд╣реИ, рд╣рдорд╛рд░реЗ рдЯрд╛рдЗрд▓ рдЕрдкрдбреЗрдЯ рдХрд┐рдП рдЬрд╛рдПрдВрдЧреЗ рдЬрдм рдЖрд░рдПрд╕рдПрд╕ рдкреНрд░рд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рдЖрд╡реЗрджрди рдХреЗ рдЕрдЧрд▓реЗ рд▓реЙрдиреНрдЪ рддрдХ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдЪрд▓рд┐рдП RSSDataSource.cs рдлрд╝рд╛рдЗрд▓ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ RSSDataSource рд╡рд░реНрдЧ рдореЗрдВ UpdateTile рд╡рд┐рдзрд┐ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ:
public static void UpdateTile() { var news = RSSDataSource.AllGroups[0].Items.ToList(); var xml = new XmlDocument(); xml.LoadXml( string.Format( @"<?xml version=""1.0"" encoding=""utf-8"" ?> <tile> <visual branding=""none""> <binding template=""TileSquarePeekImageAndText03""> <image id=""1"" src=""ms-appx:///Assets/Logo.png"" alt=""alt text""/> <text id=""1"">{0}</text> <text id=""2"">{1}</text> <text id=""3"">{2}</text> <text id=""4"">{3}</text> </binding> <binding template=""TileWidePeekImageAndText02""> <image id=""1"" src=""ms-appx:///Assets/Habr_WideLogo.png"" alt=""alt text""/> <text id=""1"">{0}</text> <text id=""2"">{1}</text> <text id=""3"">{2}</text> <text id=""4"">{3}</text> </binding> </visual> </tile>", news.Count > 0 ? System.Net.WebUtility.HtmlEncode(news[0].Title) : "", news.Count > 1 ? System.Net.WebUtility.HtmlEncode(news[1].Title) : "", news.Count > 2 ? System.Net.WebUtility.HtmlEncode(news[2].Title) : "", news.Count > 3 ? System.Net.WebUtility.HtmlEncode(news[3].Title) : "")); TileUpdateManager.CreateTileUpdaterForApplication().Update(new TileNotification(xml)); }
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреНрд▓реЙрдХ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдпрд╛рдж рд░рдЦреЗрдВ:
using Windows.Data.Xml.Dom; using Windows.UI.Notifications;
рдпрд╣рд╛рдВ рд╣рдо рдЯреЗрдореНрдкреНрд▓реЗрдЯреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯрд╛рдЗрд▓реЛрдВ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХреНрд╕рдПрдордПрд▓ рдмрдирд╛рддреЗ рд╣реИрдВ, рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЦреБрдж рдЯрд╛рдЗрд▓реНрд╕ рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред рдХреЛрдб рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкрд╛рд░рджрд░реНрд╢реА рд╣реИред рдЪреВрдВрдХрд┐ рдпрд╣ рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ, рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕рд┐рд░реНрдл рдкрд╣рд▓рд╛ рдЖрд░рдПрд╕рдПрд╕ рдлрд╝реАрдб рд▓реЗрддрд╛ рд╣реВрдВред
рдЗрд╕ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдЗрд╕ рдкрджреНрдзрддрд┐ рдкрд░ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рдкрд░ рдХреЙрд▓ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛ рдЬрд╣рд╛рдВ RSS рдкрд╣рд▓реЗ рд╕реЗ рдЙрдкрд▓рдмреНрдз рд╣реИред рдЖрдЗрдП AddGroupForFeedAsync рдХреЛ рдЖрд░рдПрд╕рдПрд╕ рдлрд╝реАрдб рд╡рд┐рдзрд┐рдпреЛрдВ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ рдФрд░ рдлрд┐рд░ рд╣рдо рдкрд╣рд▓реЗ рдлрд╝реАрдб рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж рд╕реБрд░рдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рдЕрдкрдиреЗ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
GroupedItemsPage.xaml.cs рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓реЛрдбрд╕реНрдЯреИрдЯ рд╡рд┐рдзрд┐ рдкрд░ рдЬрд╛рдПрдБ, рдЗрд╕рдореЗрдВ Async рдЬреЛрдбрд╝реЗрдВ, AddGroupForFeedAsync рд╡рд┐рдзрд┐рдпреЛрдВ рдореЗрдВ рдФрд░ UpdateTile :: рдХреЙрд▓ рдЬреЛрдбрд╝реЗрдВ
protected async override void LoadState(Object navigationParameter, Dictionary<String, Object> pageState) { this.DefaultViewModel["Groups"] = RSSDataSource.AllGroups; await RSSDataSource.AddGroupForFeedAsync("http://blogs.msdn.com/b/stasus/rss.aspx"); RSSDataSource.UpdateTile(); RSSDataSource.AddGroupForFeedAsync("http://www.spugachev.com/feed"); }
рдореИрдВрдиреЗ рдЬрд╛рдирдмреВрдЭрдХрд░ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд┐рдП рдмрд┐рдирд╛ рдПрдХ рдХреЙрд▓ рдХреЛ рдЕрд▓рдЧ рд░рдЦрд╛ - рдмрд╛рдж рдореЗрдВ - рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЬрдм рдЖрдк рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдХреИрд╕рд╛ рджрд┐рдЦрддрд╛ рд╣реИред
рдЕрдм рдпрд╣ рдПрдкреНрд▓реАрдХреЗрд╢рди рдореЗрдВ рд╡рд╛рдЗрдбрд▓реЛрдЧреЛ рд╕рдкреЛрд░реНрдЯ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрдирд╛ рд╣реБрдЖ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, Habr_WideLogo.scale-100.png рдлрд╝рд╛рдЗрд▓ рдХреЛ 310 рдХреЗ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде 150 рддрдХ рдмрдирд╛рдПрдВ, рдЗрд╕реЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рдПрд╕реЗрдЯ рдлрд╝реЛрд▓реНрдбрд░ рдореЗрдВ рдЬреЛрдбрд╝реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, Package.appxmanifest рдлрд╝рд╛рдЗрд▓ рдкрд░ рдбрдмрд▓-рдХреНрд▓рд┐рдХ рдХрд░реЗрдВ, рдЗрд╕рдХрд╛ рд╡рд┐рдЬрд╝реБрдЕрд▓ рдПрдбрд┐рдЯрд░ рдЦреЛрд▓реЗрдВ рдФрд░ рдРрдкреНрд▓рд┐рдХреЗрд╢рди рдореЗрдВ рд╡рд╛рдЗрдбрд▓реЛрдЧреЛ рдЬреЛрдбрд╝реЗрдВ:

рдЕрдм рд╣рдо рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рддреИрдпрд╛рд░ рд╣реИрдВред рдЗрд╕реЗ рдЪрд▓рд╛рдПрдВ, рдлрд┐рд░ рдЗрд╕реЗ рдмрдВрдж рдХрд░реЗрдВред рдкреНрд░рд╛рд░рдВрдн рд╕реНрдХреНрд░реАрди рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рд▓рд╛рдЗрд╡ рдЯрд╛рдЗрд▓реНрд╕ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рджреЛрдиреЛрдВ рд╡рд░реНрдЧ рдФрд░ рдЖрдпрддрд╛рдХрд╛рд░!
рдЕрдиреБрдмрдВрдз рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рд╕рдордп рдЖ рдЧрдпрд╛ рд╣реИред рд╢реЗрдпрд░ рдЕрдиреБрдмрдВрдз рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдПрдХ рдбреЗрдЯрд╛ рд╕реНрд░реЛрдд рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдЖрд░рдПрд╕рдПрд╕ рдкреЛрд╕реНрдЯ рдкреЗрдЬ рдкрд░ рдбреЗрдЯрд╛ рдХреЛ рдлреЗрдВрдЯреЗрдВрдЧреЗ, рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдЕрдзрд┐рдХрддрдо рд╕рдВрднрд╡ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗред
рдЪрд▓рд┐рдП ItemDetailPage.xaml.cs рдкреЗрдЬ рдХреЗ рдХреЛрдб рдкрд░ рдЪрд▓рддреЗ рд╣реИрдВред рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдбреЗрдЯрд╛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, DataTransferManager рдХреЗ рд▓рд┐рдП DataRequested рдИрд╡реЗрдВрдЯ рдХреЛ рд╣реИрдВрдбрд▓ рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИред рддреЛ рдЪрд▓рд┐рдП рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВред
рд╢реЗрдпрд░ рдЕрдиреБрдмрдВрдз рдЬреЛрдбрд╝реЗрдВ
рд╣рдо NavigateTo рдкреГрд╖реНрда рдореЗрдВ DataRequested рдИрд╡реЗрдВрдЯ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рддреЗ рд╣реИрдВ (рдФрд░ NavigateFrom рдореЗрдВ рдИрд╡реЗрдВрдЯ рд╕реЗ рдЕрдирд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд░рддреЗ рд╣реИрдВ), рдФрд░ рд╣реИрдВрдбрд▓рд░ рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рд╣рдо рдкреЛрд╕реНрдЯ рдирд╛рдо рдФрд░ рдкрд╛рда рдХреЗ рд╕рд╛рде рд╕рд┐рд╕реНрдЯрдо рдкреНрд░рджрд╛рди рдХрд░реЗрдВрдЧреЗ:
protected override void OnNavigatedTo(NavigationEventArgs e) { base.OnNavigatedTo(e); DataTransferManager.GetForCurrentView().DataRequested += Share_DataRequested; } protected override void OnNavigatedFrom(NavigationEventArgs e) { base.OnNavigatedFrom(e); DataTransferManager.GetForCurrentView().DataRequested -= Share_DataRequested; } private void Share_DataRequested(DataTransferManager sender, DataRequestedEventArgs args) { var selectedItem = (RSSDataItem)this.flipView.SelectedItem; args.Request.Data.Properties.Title = selectedItem.Title; args.Request.Data.Properties.Description = selectedItem.Content; args.Request.Data.SetText(selectedItem.Content); }
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдХрд░реЗрдВ, рдкреЛрд╕реНрдЯ рдкреГрд╖реНрда рдкрд░ рдЬрд╛рдПрдВ рдФрд░ рд╕рддреНрдпрд╛рдкрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЕрдм рдЕрдиреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдбреЗрдЯрд╛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд╣рдореЗрдВ RSS рдлрд╝реАрдб рдореЗрдВ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдорд┐рд▓рддрд╛ рд╣реИред рдпрд╣ рдПрдХ рдкреЛрд╕реНрдЯ, рдкреЛрд╕реНрдЯ URI, рдЖрджрд┐ рдХреА рддрд╕реНрд╡реАрд░ рд╣реИред рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИ рдХрд┐ рдЖрдк рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдлрд╝реАрдб рдЬреЛрдбрд╝рдиреЗ рдХреА рд╡рд┐рдзрд┐ рдХреЗ рдХреЛрдб рдХреЛ рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рд╕рд╛рде рд╣реА рд╕рд╛рде рд╕рдВрдмрдВрдзрд┐рдд рдХрдХреНрд╖рд╛рдПрдВ, рддрд╛рдХрд┐ рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рд╣реЛред рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ - рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдк рд╕рд╛рдЭрд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ!
DataTemplateSelector рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░рдиреЗ рдХреА рдЕрдЪрд╛рдирдХ рдЗрдЪреНрдЫрд╛ рдиреЗ рд▓реЗрдЦ рдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рдмрдбрд╝рд╛ рдмрдирд╛ рджрд┐рдпрд╛ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рддреАрд╕рд░рд╛ рднрд╛рдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рд╣рдо рдЦреЛрдЬ рдФрд░ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЕрдиреБрдмрдВрдз рдХреЛ рдЙрд╕рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВрдЧреЗ, рдпрджрд┐ рд╕рдВрднрд╡ рд╣реЛ - рдкреГрд╖реНрдарднреВрдорд┐ рд▓рдВрдмрди рдФрд░ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧреА рдЪреАрдЬреЗрдВ, рдФрд░ рдЕрдЧрд░ рдпрд╣ рдлрд┐рдЯ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ - рдореИрдВ рдХреБрдЫ рдФрд░ рд╣рд┐рд╕реНрд╕реЗ рдХрд░реВрдВрдЧрд╛ред
рд╡рд░реНрддрдорд╛рди рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдХреЛ рдПрдХ рдЫреЛрдЯреЗ рд▓рд┐рдВрдХ:
aka.ms/w8RSSp2 рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реНрдХрд╛рдИрдбреНрд░рд╛рдЗрд╡ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ
рдпреБрдкреАрдбреА:рдЪрдХреНрд░ рдХрд╛ рднрд╛рдЧ 1рдЪрдХреНрд░ рдХрд╛ рднрд╛рдЧ 3