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);
}
}
我需要使用 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);
}
}