簡體   English   中英

使用X:Array存儲WPF ComboBox圖像項

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM