Как определить, что мой RSS-ридер не работает из-за плохого RSS-канала или из-за чего-то другого? - PullRequest
0 голосов
/ 22 апреля 2019

У меня проблемы с отображением XML-данных из RSS Reader, и я пробовал много разных RSS-каналов из разных источников, и я не могу ничего отобразить.

Я пытаюсь получить русский языкЛенты новостей RSS, и я также использовал ленту новостей BBC, и я не могу получить какие-либо данные, и я не могу решить, является ли это чем-то на конце RSS-ленты или чем-то на моем конце (код или что-то из метода Go),Я использовал пример кода RSS-канала, и он корректно работал на моем компьютере, поэтому я просто попробовал его с разными читателями, и он вообще ничего не вызывает.

Это мой NewsFeedPage (XAML):

 <Grid>
        <NavigationView x:Name="NavView"
                        ItemInvoked="NavView_ItemInvoked"
                        SelectionChanged="NavView_SelectionChanged"
                        Loaded="NavView_Loaded"
                        Canvas.ZIndex="0" Background="White" Margin="0,0,222,10" Grid.ColumnSpan="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
            <NavigationView.MenuItems>
                <NavigationViewItem x:Name="HomeNav" Content="Home" Tag="Home" Icon="Home"/>
                <NavigationViewItemSeparator Height="100"></NavigationViewItemSeparator>
                <NavigationViewItemHeader Content="Separate Pages"/>
                <NavigationViewItem x:Name="AttractionsNav" Content="Attractions" Tag="Attractions" Icon="World"/>
                <NavigationViewItem x:Name="PlacestoEatNav" Content="Places to Eat" Tag="PlacesToEat" Icon="Like"/>
                <NavigationViewItem x:Name="MapNav" Content="Map" Tag="Map" Icon="Map"/>
                <NavigationViewItem x:Name="PhotosNav" Content="Photos" Tag="Photos" Icon="Camera"/>
                <NavigationViewItem x:Name="NewsNav" Content="News" Tag="News" Icon="Globe"/>
                <NavigationViewItem x:Name="WeatherNav" Content="Weather" Tag="weather" Icon="CalendarWeek"/>
            </NavigationView.MenuItems>


            <Frame x:Name="ContentFrame" Margin="24,24,0,24" Width="1916" VerticalAlignment="Stretch">
                <Frame.ContentTransitions>
                    <TransitionCollection>
                        <NavigationThemeTransition/>
                    </TransitionCollection>
                </Frame.ContentTransitions>
            </Frame>

        </NavigationView>

        <Grid HorizontalAlignment="Stretch" Margin="348,0,0,0" VerticalAlignment="Stretch">
            <Grid.ColumnDefinitions>
                <ColumnDefinition MaxWidth="1000"/>
                <ColumnDefinition MinWidth="500"/>
            </Grid.ColumnDefinitions>

            <Grid Grid.Column="0" Padding="12,12,12,0" KeyDown="Go_KeyDown">
                <Grid.RowDefinitions>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="auto"/>
                    <RowDefinition Height="*"/>
                </Grid.RowDefinitions>

                <TextBox Grid.Row="0" HorizontalAlignment="Center" VerticalAlignment="Top" Foreground="Firebrick" Text="BBC News" FontSize="28" Background="White" IsReadOnly="True"/>
                <TextBox Grid.Row="1" Name="value" VerticalAlignment="Center" TextWrapping="Wrap" Text="Press ENTER key to see latest new stories below. Click on a blue web address to see story details on the right." IsReadOnly="True"/>

                <ScrollViewer Grid.Row="2" Margin="20" BorderThickness="0">
                    <ItemsControl Name="display">
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <StackPanel Background="GhostWhite">
                                    <TextBlock FontSize="24" TextWrapping="Wrap" Text="{Binding Path=Title.Text}" Foreground="Firebrick" Margin="2,2,10,2"/>
                                    <TextBlock Text="{Binding Path=PublishedDate}" Foreground="Firebrick"/>
                                    <TextBlock Text="{Binding Path=Summary.Text}" TextWrapping="WrapWholeWords" Foreground="Black"/>
                                    <TextBlock x:Name="address" Tapped="Address_OnTapped" Text="{Binding Path=Links[0].Uri}" Foreground="Blue">
                                    </TextBlock>
                                    <TextBlock></TextBlock>
                                    <Rectangle x:Name="BorderBottom" Height="4" HorizontalAlignment="Stretch" VerticalAlignment="Bottom" Fill="DarkSalmon"/>
                                </StackPanel>
                            </DataTemplate>
                        </ItemsControl.ItemTemplate>


                    </ItemsControl>
                </ScrollViewer>

            </Grid>

            <Grid Grid.Column="1">
                <WebView x:Name="ArticleWebView"/>
            </Grid>

        </Grid>


    </Grid>
</Page>

Это мой файл NewsFeed.cs:

public sealed partial class NewsFeedPage : Page
    {
        public NewsFeedPage()
        {
            this.InitializeComponent();
        }

        public NewsFeed MyFeed = new NewsFeed();

        public string address = "http://feeds.bbci.co.uk/news/rss.xml";



        private void Address_OnTapped(object sender, TappedRoutedEventArgs e)
        {
            var tblk = sender as TextBlock;
            Uri websiteuri = new Uri(tblk.Text);
            ArticleWebView.Navigate(websiteuri);
        }

        private void Go_KeyDown(object sender, KeyRoutedEventArgs e)
        {
            MyFeed.Go(ref display, address, e);
        }

        private void NavView_Loaded(object sender, RoutedEventArgs e)
        {

        }


        private void NavView_ItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
        {
            if (args.IsSettingsInvoked)
            {
                Frame.Navigate(typeof(SettingsPage));
            }

Это мой файл NewsFeed.cs (вспомогательный класс):

namespace SEMESTER_PROJECT
{
    public class NewsFeed
    {
        private async void Load(ItemsControl list, Uri uri)
        {
            SyndicationClient client = new SyndicationClient();

            SyndicationFeed feed = await client.RetrieveFeedAsync(uri);

            if (feed != null)
            {
                foreach (SyndicationItem item in feed.Items)
                {
                    list.Items.Add(item);
                }
            }
        }

        public void Go(ref ItemsControl list, string value, KeyRoutedEventArgs args)
        {
            if (args.Key == Windows.System.VirtualKey.CapitalLock)
            {
                try
                {
                    Load(list, new Uri(value));

                }
                catch
                {
                    Console.Write("Yeah it didn't work for some reason.");
                }
                list.Focus(FocusState.Keyboard);
            }
        }

    }

}

У меня естьпытался использовать разные клавиши для запуска метода Go, но клавиша Enter делает NavigationView больше и меньше, в то время как клавиша Tab перемещается между опциями в NavigationView.Я не совсем уверен, что проблема в ключе, но я думаю, что так оно и есть.

1 Ответ

0 голосов
/ 23 апреля 2019

Если вы имели в виду, что не можете получить какие-либо данные при нажатии Введите , проблема здесь:

if (args.Key == Windows.System.VirtualKey.CapitalLock)

Если вы хотите вызвать метод Go и перейти в блок кода метода Load при нажатии , введите . Вам необходимо изменить код:

if (args.Key == Windows.System.VirtualKey.Enter)

Я пытался использовать разные клавиши для запуска метода Go, но клавиша Enter делает NavigationView больше и меньше, в то время как клавиша Tab перемещается между опциями в NavigationView. Я не совсем уверен, что проблема в ключе, но я думаю, что так оно и есть.

Это по замыслу. Если на текущей странице нет сфокусированного элемента, он автоматически найдет следующий фокусируемый элемент и сделает его фокусным, когда вы нажмете Enter . Вы можете вручную сконцентрироваться на каком-то одном элементе программным путем, чтобы решить эту проблему.

Например, вы можете сосредоточиться на ItemsControl при загрузке страницы.

private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    display.Focus(FocusState.Programmatic);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...