[英]Store Combobox items in The Form of Array and Retrieve SelectedId in WPF
[英]Use X:Array to store WPF ComboBox Image items
我在資源字典中定義了二維XAML數組,以存儲WPF ComboBox數據內容,如下所示。
<x:Array x:Key="ThreatLevelArray" Type="{x:Type local:ThreatLevel}">
<local:ThreatLevel ThreatLevelName="Very Low" ThreatLevelNumber="0" />
<local:ThreatLevel ThreatLevelName="Low" ThreatLevelNumber="1" />
</x:Array>
此類在后面的代碼中支持該數組。
public class ThreatLevel
{
public int ThreatLevelNumber { get; set; }
public string ThreatLevelName { get; set; }
}
組合框顯示“ ThreatLevelName”,並使用“ ThreatLevelNumber”提供的值更新數據庫中的“ ThreatLevel”字段。
<ComboBox x:Name="threatLevelComboBox" DisplayMemberPath="ThreatLevelName" IsEditable="True"
IsReadOnly="True"
ItemsSource="{StaticResource ThreatLevelArray}"
SelectedValue="{Binding Path=ThreatLevel, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"
SelectedValuePath="ThreatLevelNumber"
Style="{StaticResource ComboBoxStyle}" />
一切正常,但是我希望能夠顯示圖像而不是“ ThreatLevelName”文本。 我努力了 ....
public class ThreatLevel
{
public int ThreatLevelNumber { get; set; }
public string ThreatLevelName { get; set; }
public Image ThreatLevelImage { get; set; }
}
但是以下內容為我提供了錯誤“用於“圖像”的TypeConverter不支持從字符串轉換”。
<x:Array x:Key="ThreatLevelArray" Type="{x:Type local:ThreatLevel}">
<local:ThreatLevel ThreatLevelName="Very Low" ThreatLevelNumber="0" ThreatLevelImage="/RMS_EF6;component/RMS_Images/VeryLow.png"/>
<local:ThreatLevel ThreatLevelName="Low" ThreatLevelNumber="1" ThreatLevelImage="/RMS_EF6;component/RMS_Images/Low.png"/>
</x:Array>
我該如何解決此錯誤,並使用此過程創建如下所示的ComboBox。
<ComboBox x:Name="threatLevelComboBox" DisplayMemberPath="ThreatLevelImage" IsEditable="True"
IsReadOnly="True"
ItemsSource="{StaticResource ThreatLevelArray}"
SelectedValue="{Binding Path=ThreatLevel, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"
SelectedValuePath="ThreatLevelNumber"
Style="{StaticResource ComboBoxStyle}" />
XAML解析器將圖像路徑字符串轉換為BitmapFrame
而不是Image
元素。 這是通過ImageSourceConverter
類執行的從字符串到ImageSource
的隱式類型轉換來完成的。
將ImageSource
用作ThreatLevelImage
屬性的屬性類型
public class ThreatLevel
{
public int ThreatLevelNumber { get; set; }
public string ThreatLevelName { get; set; }
public ImageSource ThreatLevelImage { get; set; }
}
而不是設置DisplayMemberPath
,而是在ComboBox的ItemTemplate
中使用Image
元素:
<ComboBox ...>
<ComboBox.ItemTemplate>
<DataTemplate>
<Image Source="{Binding ThreatLevelImage}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.