转换器使用

在wpf中,使用转换器可以实现在不同情况下使用不同的样式
1.Lable红绿色切换
.xaml

 xmlns:converter="clr-namespace:Dzhwt.Theme.Converter"
 <UserControl.Resources>
        <converter:PriceColorConverter x:Key="PriceColorConver"></converter:PriceColorConverter>
</UserControl.Resources>
<Label Content="{Binding NowPrice}" HorizontalAlignment="Right">
	<Label.Foreground>
		<MultiBinding  Converter="{StaticResource PriceColorConver}">
			<Binding Path="NowPrice"/>
			<Binding Path="ClosingPrice"/>
		</MultiBinding>
	</Label.Foreground>
</Label>

转换器类

public class PriceColorConverter : IMultiValueConverter
{
	public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
	{
		try
		{
			if (values[0].ToString() == "--" || values[1].ToString() == "--")
			{
				return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#626B74"));
			}

			double current = System.Convert.ToDouble(values[0].ToString());
			double LAST_CLOSE = System.Convert.ToDouble(values[1].ToString());
			if (current < LAST_CLOSE)
			{
				return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#008A00"));
			}
			else if (current > LAST_CLOSE)
			{
				return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#F03E3A"));
			}
			else if(current == LAST_CLOSE)
			{
				return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#778899"));
			}
			return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#626B74"));
		}
		catch (Exception e)
		{
			return new SolidColorBrush((Color)ColorConverter.ConvertFromString("#626B74"));
		}

	}


	public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
	{
		return null;
	}
}

通过给Lable绑定转换器PriceColorConverter,传递的参数为属性NowPrice和ClosingPrice,当NowPrice>ClosingPrice时,Label显示红色,反之显示绿色,相等则为灰色。
2.控制svg箭头的样式
.xaml

<converter:CompareConverter x:Key="CompareConverter"></converter:CompareConverter>
<Path Stretch="Uniform" Height="15" HorizontalAlignment="Left" VerticalAlignment="Center" Data="M479.744 307.2l168.96 165.888a32.768 32.768 0 0 1 0 46.592 30.72 30.72 0 0 1-45.568 0L486.4 409.6v464.896a32.768 32.768 0 1 1-65.024 0V409.6l-117.248 118.784a39.424 39.424 0 0 1-45.568-6.656 32.768 32.768 0 0 1 0-46.592L421.376 307.2a35.328 35.328 0 0 1 58.368 0z">
    <Path.Style>
        <Style TargetType="Path">
            <Setter Property="Visibility" Value="Collapsed"/>
            <Style.Triggers>
                <DataTrigger Value="1">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource CompareConverter}">
                            <Binding Path="NowPrice" />
                            <Binding Path="ClosingPrice" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Fill" Value="Red" />
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
                <DataTrigger Value="-1">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource CompareConverter}">
                            <Binding Path="NowPrice" />
                            <Binding Path="ClosingPrice" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Fill" Value="Green" />
                    <Setter Property="RenderTransformOrigin" Value="0.5,0.5"/>
                    <Setter Property="RenderTransform">
                        <Setter.Value>
                            <RotateTransform Angle="180"/>
                        </Setter.Value>
                    </Setter>
                    <Setter Property="Visibility" Value="Visible"/>
                </DataTrigger>
                <DataTrigger Value="0">
                    <DataTrigger.Binding>
                        <MultiBinding Converter="{StaticResource CompareConverter}">
                            <Binding Path="NowPrice" />
                            <Binding Path="ClosingPrice" />
                        </MultiBinding>
                    </DataTrigger.Binding>
                    <Setter Property="Visibility" Value="Collapsed"/>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Path.Style>
</Path>

转换器类

public class CompareConverter : IMultiValueConverter
{
	public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
	{
		if (values != null && values.Length == 2)
		{
			double result1, result2;
			if(double.TryParse(values[0].ToString(), out result1)&&double.TryParse(values[1].ToString(), out result2))
			{
				if (result1 == result2)
				{
					return 0;
				}
				else if (result1 > result2)
				{
					return 1;
				}
				else
				{
					return -1;
				}
			}
		}
		return 0;
	}

	public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
	{
		throw new NotImplementedException();
	}
}

Path控件为一个向上的箭头,通过给Path绑定转换器CompareConverter ,传递的参数为属性NowPrice和ClosingPrice,当NowPrice>ClosingPrice时,Path样式为一个向上的红色箭头,反之为一个向下的绿色箭头,相等则不显示。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

vegetablesssss

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值