2012-04-22 31 views
0

我试图根据天气WCF在预测中分配给当天的天气ID显示天气图标的图像。我将数据显示在数据网格中,并希望添加一个带有图标的新列。不幸的是,图标是我知道的GIF Silverlight不支持,所以如果有人可以帮助这将是伟大的!如何使用WCF服务在Silverlight数据网格中显示GIF图像?

public partial class MainPage : UserControl 
{ 

创建与它们相关联的图像和ID的数组。

private WeatherDescription[] weatherInformation; 

    WeatherSoapClient weatherClient = new WeatherSoapClient(); 
    public MainPage() 
    { 
     InitializeComponent(); 

     weatherClient.GetCityForecastByZIPCompleted += new EventHandler<GetCityForecastByZIPCompletedEventArgs>(weatherClient_GetCityForecastByZIPCompleted); 
     weatherClient.GetCityWeatherByZIPCompleted += new EventHandler<GetCityWeatherByZIPCompletedEventArgs>(weatherClient_GetCityWeatherByZIPCompleted); 
     weatherClient.GetWeatherInformationCompleted += new EventHandler<GetWeatherInformationCompletedEventArgs>(weatherClient_GetWeatherInformationCompleted); 
     weatherClient.GetWeatherInformationAsync(); 
    } 

这就是我将WCF调用的结果设置为数组的地方。

void weatherClient_GetWeatherInformationCompleted(object sender, GetWeatherInformationCompletedEventArgs e) 
    { 
     weatherInformation = e.Result; 
    } 

    void weatherClient_GetCityForecastByZIPCompleted(object sender, GetCityForecastByZIPCompletedEventArgs e) 
    { 
     this.dataGrid1.ItemsSource = e.Result.ForecastResult; 
     for (int i = 0; i < e.Result.ForecastResult.Length; i++) 
     { 
      if (i == 0) 
      { 
       e.Result.ForecastResult[i].Temperatures.DaytimeHigh += "°F"; 
       e.Result.ForecastResult[i].ProbabilityOfPrecipiation.Daytime += "%"; 
      } 
      else 
      { 
       e.Result.ForecastResult[i].Temperatures.DaytimeHigh += "°F"; 
       e.Result.ForecastResult[i].Temperatures.MorningLow += "°F"; 
       e.Result.ForecastResult[i].ProbabilityOfPrecipiation.Daytime += "%"; 
       e.Result.ForecastResult[i].ProbabilityOfPrecipiation.Nighttime += "%"; 
      } 
     } 
    } 

    void weatherClient_GetCityWeatherByZIPCompleted(object sender, GetCityWeatherByZIPCompletedEventArgs e) 
    { 
     this.textBlock1.Text = "City: " + e.Result.City + "\n"; 
     this.textBlock1.Text += "State: " + e.Result.State + "\n"; 
     this.textBlock1.Text += "Weather ID: " + e.Result.WeatherID + "\n"; 
     this.textBlock1.Text += "Weather Station: " + e.Result.WeatherStationCity + "\n"; 
     this.textBlock1.Text += "Temperature: " + e.Result.Temperature + "°F \n"; 
     this.textBlock1.Text += "Description: " + e.Result.Description + "\n"; 
     this.textBlock1.Text += "Pressure: " + e.Result.Pressure + "\n"; 
     this.textBlock1.Text += "Relative Humidity: " + e.Result.RelativeHumidity + "% \n"; 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     weatherClient.GetCityWeatherByZIPAsync(inputZip.Text); 
     weatherClient.GetCityForecastByZIPAsync(inputZip.Text); 
    } 
} 
} 

然后,如果它有帮助,这是我的dataGrid的标记。

<sdk:DataGrid AutoGenerateColumns="False" Height="310" Margin="12,131,407,0" Name="dataGrid1" VerticalAlignment="Top" AlternatingRowBackground="#00010000"> 
     <sdk:DataGrid.Columns> 
      <sdk:DataGridTextColumn Header="Date" Binding="{Binding Date}" /> 
      <sdk:DataGridTextColumn Header="ID" Binding="{Binding WeatherID}" /> 
      <sdk:DataGridTextColumn Header="Description" Binding="{Binding Desciption}" /> 
      <sdk:DataGridTemplateColumn Header="Temperature"> 
       <sdk:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="{Binding Temperatures.DaytimeHigh}" Name="DaytimeHigh" /> 
          <TextBlock Text="{Binding Temperatures.MorningLow}" Name="MorningLow"/> 
         </StackPanel> 
        </DataTemplate> 
       </sdk:DataGridTemplateColumn.CellTemplate> 
      </sdk:DataGridTemplateColumn> 
      <sdk:DataGridTemplateColumn Header="Probability of Precipitation"> 
       <sdk:DataGridTemplateColumn.CellTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="{Binding ProbabilityOfPrecipiation.Daytime}" Name="Daytime"/> 
          <TextBlock Text="{Binding ProbabilityOfPrecipiation.Nighttime}" Name="Nighttime"/> 
         </StackPanel> 
        </DataTemplate> 
       </sdk:DataGridTemplateColumn.CellTemplate> 
      </sdk:DataGridTemplateColumn> 
     </sdk:DataGrid.Columns> 
    </sdk:DataGrid> 

如果您需要更多的信息,请告诉我。我希望有人能够提供帮助。

+0

那么,你的问题是什么?是关于GIF或您的实施 – KodeKreachor 2012-04-22 00:50:58

+0

我不确定如何去做。第一个问题是在引用ID时在数据网格中显示图像。然后如何将gif转换成JPG格式? – Fogolicious 2012-04-22 01:06:49

回答

0

Silverlight不支持GIF,因此您必须将它们转换为jpg或png。我建议你只做一次服务器端。

然后,您可以使用相对路径在模板列中的数据网格中显示图像。

<Image x:Name="myImage" Source="../someImage.jpg" /> 

你的图像存储在哪里?你提到通过id来引用它们。它们是否存储在数据库中?然后,您可以编写一个HTTP处理程序来加载图像或通过您的服务加载它们。

+0

我其实只是写了一个更好的尝试和帮助解决这个问题,所以这是这个链接。 http://stackoverflow.com/questions/10269731/creating-a-converter-to-take-an-id-and-create-an-image-in-silverlight 如果这不能回答你的问题,让我知道。我感谢帮助! – Fogolicious 2012-04-22 16:26:49