Wpf 使用 ivalueconverter 根据列表框的选定值更改矩形颜色

Wpf change rectangle color depending on selected value of listbox using ivalueconverter

我需要使用 ivalue 转换器根据列表框的选定值更改矩形颜色(填充)。这是我的代码

xaml:

<UserControl.Resources>
    <cc:ConversorEstados x:Key="ConverterEstados"/>

</UserControl.Resources>

<StackPanel>
    <StackPanel.Resources>
        <XmlDataProvider x:Key="tipo_estado" Source="/Resources/Estados.xml" XPath="/estados"/>

    </StackPanel.Resources>

    <Grid>
        <ListBox Name="Lista"  ItemsSource="{Binding Source={StaticResource tipo_estado},
XPath=tipo/@name}" DisplayMemberPath="Opcion" Height="121" HorizontalAlignment="Left" Margin="32,35,0,0" VerticalAlignment="Top" Width="199" />
        <Rectangle Height="77" HorizontalAlignment="Left" Margin="304,45,0,0" Name="rectangulo" Stroke="Black" VerticalAlignment="Top" Width="221" 
Fill="{Binding Converter={StaticResource ConverterEstados}}" />

    </Grid>

这是我的转换器class

 public class ConversorEstados : IValueConverter
{


    public string Opcion { get; set; }

    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        switch (value.ToString().ToLower())
        {
            case "opcion1":
                return new SolidColorBrush(Colors.Aqua);
            case "opcion2":
                return new SolidColorBrush(Colors.Cyan);
            case "opcion3":
                return new SolidColorBrush(Colors.Brown);
            case "opcion4":
                return new SolidColorBrush(Colors.DarkGreen);
            default:
                return new SolidColorBrush(Colors.White);
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }

总线不工作。它在执行时没有显示错误,但是当我在列表框中更改我的选择时没有任何反应,它采用默认值 - 白色。

您需要直接绑定到 ListBox。试试这个:

<ListBox x:Name="Lista"/>
<Rectangle Fill="{Binding SelectedValue, ElementName=Lista, Converter={StaticResource ConverterEstados}}"/>

我们刚刚将 SelectedValue, ElementName=Lista 添加到填充的绑定中。

编辑 1

此外,您的转换器需要检查空值,因为 ListBox 将以未选择状态开始。将此添加到您的 Convert 方法中:

public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
    if (value == null)
    {
        return new SolidColorBrush(Colors.White);
    }

    switch (value.ToString().ToLower())
    {
        case "opcion1":
            return new SolidColorBrush(Colors.Aqua);
        case "opcion2":
            return new SolidColorBrush(Colors.Cyan);
        case "opcion3":
            return new SolidColorBrush(Colors.Brown);
        case "opcion4":
            return new SolidColorBrush(Colors.DarkGreen);
        default:
            return new SolidColorBrush(Colors.White);
    }
}