我拼命地試圖在運行時用下載的圖形填充我的 ListView。到目前為止,我已經嘗試了幾種方法,但我無法讓它正常作業。
下載并自行顯示(我在一個名為 pic 的畫布中進行了測驗,因此代碼中仍有片段)作業正常,但 ListView 不會顯示該死的影像。
C#代碼:
private async void LoadFlags(RootAutomarken automarken)
{
Image flag = new Image();
var client = new HttpClient();
foreach (var item in automarken.Automarken)
{
flag = await LoadFlag(item.Land, client);
mainList.Items.Add(new CarListItem { Logo = flag, Name = item.Name, Land = item.Land, Region = item.Region});
}
}
private async Task<Image> LoadFlag(string countrycode, HttpClient client)
{
var request = new HttpRequestMessage
{
Method = HttpMethod.Get,
RequestUri = new Uri("https://www.countryflagsapi.com/png/" countrycode),
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
Stream imageStreamSource = await response.Content.ReadAsStreamAsync();
PngBitmapDecoder decoder = new PngBitmapDecoder(imageStreamSource, BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.Default);
BitmapSource bitmapSource = decoder.Frames[0];
// Draw the Image
Image myImage = new Image();
myImage.Source = bitmapSource;
myImage.Stretch = Stretch.Uniform;
myImage.Height = 15;
myImage.Width = 15;
myImage.Margin = new Thickness(20);
pic.Children.Add(myImage);
return myImage;
}
XAML:
<Window.Resources>
<Style TargetType="GridViewColumnHeader">
<Setter Property="Background" Value="#505050" />
<Setter Property="Foreground" Value="#FFDADADA" />
<Setter Property="BorderBrush" Value="#606060" />
</Style>
</Window.Resources>
<Grid>
<ListView x:Name="mainList" Background="#202020" Margin="20,100,20,10" BorderBrush="#505050" Foreground="#FFDADADA">
<ListView.View>
<GridView>
<GridViewColumn Header="Logo" Width="50">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Source="{Binding Logo}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" Width="565"/>
<GridViewColumn Header="Land" DisplayMemberBinding="{Binding Land}" Width="50"/>
<GridViewColumn Header="Region" DisplayMemberBinding="{Binding Region}" Width="50"/>
</GridView>
</ListView.View>
</ListView>
<Canvas x:Name="pic"></Canvas>
</Grid>
uj5u.com熱心網友回復:
您正在嘗試將Source一個元素的屬性Image(在 XAML 中)系結到另一個Image元素(在代碼中創建)。那是行不通的。
不要Image在視圖模型代碼中使用該型別。Image是一個視圖元素。
將屬性的型別和 to方法Logo的回傳型別更改為.LoadFlagImageSource
private static async Task<ImageSource> LoadFlag(
string countrycode, HttpClient client)
{
using var response = await client.GetAsync(
$"https://www.countryflagsapi.com/png/{countrycode}");
response.EnsureSuccessStatusCode();
using var stream = await response.Content.ReadAsStreamAsync();
return BitmapFrame.Create(stream,
BitmapCreateOptions.PreservePixelFormat, BitmapCacheOption.OnLoad);
}
...
ImageSource flag = await LoadFlag(item.Land, client);
mainList.Items.Add(new CarListItem { Logo = flag, ... });
并像這樣系結它:
<Image Width="15" Height="15" Margin="20" Source="{Binding Logo}"/>
uj5u.com熱心網友回復:
您不能將Source一個元素的屬性系結Image到另一個Image元素。
嘗試這個:
<GridViewColumn.CellTemplate>
<DataTemplate>
<ContentControl Content="{Binding Logo}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/532969.html
標籤:C#wpf
上一篇:我怎樣才能洗掉滾動條箭頭wpf
