加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#WPF等级控制类似于Wifi信号指示器

发布时间:2020-12-16 01:58:31 所属栏目:百科 来源:网络整理
导读:我已经搜索了很多 WPF等级控制simliar到这个图像中的wifi信号强度指示器,但我找不到一个 我试着自己做,这是结果:) Grid Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="58" Margin="90,114,0" Stroke="Black" VerticalAlignment="Top" Widt
我已经搜索了很多 WPF等级控制simliar到这个图像中的wifi信号强度指示器,但我找不到一个

我试着自己做,这是结果:)

<Grid>
    <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="58" Margin="90,114,0" Stroke="Black" VerticalAlignment="Top" Width="22"/>
    <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="74" Margin="117,98,0" Stroke="Black" VerticalAlignment="Top" Width="22"/>
    <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="93" Margin="144,79,0" Stroke="Black" VerticalAlignment="Top" Width="22"/>
    <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="111" Margin="171,61,0" Stroke="Black" VerticalAlignment="Top" Width="22"/>
    <Rectangle Fill="#FFF4F4F5" HorizontalAlignment="Left" Height="124" Margin="198,48,0" Stroke="Black" VerticalAlignment="Top" Width="22"/>

</Grid>

我需要根据评级值更改矩形颜色,例如:

<l:UserControl1 RatingValue="3" />

这将为前三个矩形着色

任何人都可以帮我这样做,或找到类似的控件吗?

解决方法

您可以创建一个IValueConverter来更改矩形的颜色

这是一个非常快速(粗略)的例子:

XAML:

<Grid Background="DarkBlue"  >
    <Grid.Resources>
        <local:RatingConverter x:Key="RatingConverter" OnBrush="#FFFFFFFF" OffBrush="#50FFFFFF" />
        <Style TargetType="Rectangle">
            <Setter Property="HorizontalAlignment" Value="Left" />
            <Setter Property="VerticalAlignment" Value="Bottom" />
            <Setter Property="Margin" Value="5,0" />
        </Style>
    </Grid.Resources>

    <StackPanel Orientation="Horizontal" HorizontalAlignment="Center" VerticalAlignment="Center">
        <Rectangle Width="5" Height="5" Fill="{Binding RatingValue,Converter={StaticResource RatingConverter},ConverterParameter=1}"/>
        <Rectangle Width="5" Height="10" Fill="{Binding RatingValue,ConverterParameter=2}"/>
        <Rectangle Width="5" Height="15" Fill="{Binding RatingValue,ConverterParameter=3}"/>
        <Rectangle Width="5" Height="20" Fill="{Binding RatingValue,ConverterParameter=4}"/>
        <Rectangle Width="5" Height="25" Fill="{Binding RatingValue,ConverterParameter=5}"/>
    </StackPanel>
</Grid>

码:

namespace WpfApplication14
{
    /// <summary>
    /// Interaction logic for UserControl1.xaml
    /// </summary>
    public partial class UserControl1 : UserControl
    {
        public UserControl1()
        {
            InitializeComponent();
            DataContext = this;
        }

        public int RatingValue
        {
            get { return (int)GetValue(RatingValueProperty); }
            set { SetValue(RatingValueProperty,value); }
        }

        // Using a DependencyProperty as the backing store for RatingValue.  This enables animation,styling,binding,etc...
        public static readonly DependencyProperty RatingValueProperty =
            DependencyProperty.Register("RatingValue",typeof(int),typeof(UserControl1),new UIPropertyMetadata(0));
    }

    public class RatingConverter : IValueConverter
    {
        public Brush OnBrush { get; set; }
        public Brush OffBrush { get; set; }

        public object Convert(object value,Type targetType,object parameter,System.Globalization.CultureInfo culture)
        {
            int rating = 0;
            int number = 0;
            if (int.TryParse(value.ToString(),out rating) && int.TryParse(parameter.ToString(),out number))
            {
                if (rating >= number)
                {
                    return OnBrush;
                }
                return OffBrush;
            }
            return Brushes.Transparent;
        }

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

用法:

<Window x:Class="WpfApplication14.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:l="clr-namespace:WpfApplication14" 
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <l:UserControl1 RatingValue="3" />
    </Grid>
</Window>

结果:

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读