2016-02-02 7 views
0

Как вытащить URL-адрес из station.xml, чтобы играть в ListBox (MouseDoubleClick)?Как вытащить URL из station.xml, чтобы играть в ListBox

мой код

XAML

<Window x:Class="WpfApplication6.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
     xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
     xmlns:local="clr-namespace:WpfApplication6" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ListBox x:Name="listBox" HorizontalAlignment="Left" Height="220" Margin="20,30,0,0" VerticalAlignment="Top" Width="150" MouseDoubleClick="mylistbox"/> 
    </Grid> 
</Window> 

Вот мой Xml файл stations.xml

<?xml version="1.0" encoding="utf-8"?> 
<stations> 
    <station url="http://onair.eltel.net:80/europaplus-128k" id="0">EuropaPlus2</station> 
    <station url="http://online.radiorecord.ru:8101/rr_128" id="1">RRadio</station> 
    <station url="http://radio.kazanturl-fm.ru:8000/mp3" id="2">Kazanturl</station> 
    <station url="http://stream.kissfm.ua:8000/kiss" id="3">Kiss FM</station> 
    </stations> 

С # код enter link description here

ответ

0

Вы заполняете свой ListBox строками, которые не включают атрибут «url». Один из вариантов - изменить метод LoadStations(), чтобы добавить весь XmlNode в элемент ListBox. Внутренний текст (название станции) будет отображаться по умолчанию.

public void LoadStations() 
{ 
    string fileName = "data.xml"; 
    if (File.Exists(fileName)) 
    { 
     XmlDocument xmlDoc = new XmlDocument(); 

     xmlDoc.Load(fileName); 
     XmlNodeList stationNodes = xmlDoc.SelectNodes("//stations/station"); 
     foreach (XmlNode stationNode in stationNodes) 
     { 
       listBox.Items.Add(stationNode); // by default, the InnerText will be displayed     
     } 

     xmlDoc.Save(fileName); 
    } 
    else 
    { 
     MessageBox.Show(" "); 
    } 
} 

Затем, вы можете извлечь «URL» атрибут в обработчике MouseDoubleClick так:

private void mylistbox(object sender, MouseButtonEventArgs e) 
{    
    XmlNode selectedNode = listBox.SelectedItem as XmlNode; 
    string url = selectedNode.Attributes["url"].Value; 
    MessageBox.Show(url); 
    Play(url); 
} 

Кроме того, если это возможно, вы можете рассмотреть возможность загрузки ваших элементов ListBox из файла XML с помощью Привязка данных WPF. Вы могли бы удалить свой метод LoadStations(), привязав ListBox к XML-файлу в XAML. Что-то вроде этого:

<Grid> 
    <Grid.Resources> 
    <XmlDataProvider x:Key="StationsXml" Source="stations.xml" /> 
    </Grid.Resources> 

    <ListBox HorizontalAlignment="Left" Height="220" Margin="20,30,0,0" 
     VerticalAlignment="Top" Width="150"    
     ItemsSource="{Binding Source={StaticResource StationsXml}, XPath=stations/station}" 
     MouseDoubleClick="mylistbox" 
      /> 
</Grid>