WPF 颜色生成器

1.界面设计

<Window x:Class="WpfApp.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:WpfApp"
        Icon="https://demosc.chinaz.net/Files/pic/iconsico/8254/e10.ico"
        mc:Ignorable="d"
        Title="颜色生成器" Height="300" Width="600" WindowStartupLocation="CenterScreen">
    <Window.Resources>
        <Color B="100" G="100" R="100" A="100" x:Key="myColor"/>
    </Window.Resources>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="Auto"/>
        </Grid.RowDefinitions>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Rectangle x:Name="dispRect" Stroke="DarkGreen" StrokeThickness="5" Fill="White" Grid.Column="1" Grid.Row="1" Grid.ColumnSpan="2" Height="100" Margin="20,10,20,10" Cursor="Hand"/>
        <StackPanel Grid.Column="0" Grid.Row="0" Orientation="Horizontal">
            <TextBlock FontSize="12" Margin="10,30,5,20" Padding="10"></TextBlock>
            <Slider Orientation="Vertical" Value="0" Height="80" Maximum="255" Minimum="0" TickPlacement="BottomRight" TickFrequency="10" IsSnapToTickEnabled="True" Margin="0,0,5,0" AutoToolTipPlacement="BottomRight" AutoToolTipPrecision="2" ValueChanged="OnRedSliderValueChange"/>
        </StackPanel>
        <StackPanel Grid.Column="1" Grid.Row="0" Orientation="Horizontal">
            <TextBlock FontSize="12" Margin="10,30,5,20" Padding="10">绿</TextBlock>
            <Slider Orientation="Vertical" Value="0" Height="80" Maximum="255" Minimum="0" TickPlacement="BottomRight" TickFrequency="10" IsSnapToTickEnabled="True" Margin="0,0,5,0" AutoToolTipPlacement="BottomRight" AutoToolTipPrecision="2" ValueChanged="OnGreenSliderValueChange"/>
        </StackPanel>
        <StackPanel Grid.Column="2" Grid.Row="0" Orientation="Horizontal">
            <TextBlock FontSize="12" Margin="10,30,5,20" Padding="10"></TextBlock>
            <Slider Orientation="Vertical" Value="0" Height="80" Maximum="255" Minimum="0" TickPlacement="BottomRight" TickFrequency="10" IsSnapToTickEnabled="True" Margin="0,0,5,0" AutoToolTipPlacement="BottomRight" AutoToolTipPrecision="2" ValueChanged="OnBlueSliderValueChange"/>
        </StackPanel>
        <StackPanel Grid.Column="3" Grid.Row="0" Orientation="Horizontal">
            <TextBlock FontSize="12" Margin="10,30,5,20" Padding="10">透明度</TextBlock>
            <Slider Orientation="Vertical" Value="0" Height="80" Maximum="255" Minimum="0" TickPlacement="BottomRight" TickFrequency="10" IsSnapToTickEnabled="True" Margin="0,0,5,0" AutoToolTipPlacement="BottomRight" AutoToolTipPrecision="2" ValueChanged="OnOpacitySliderValueChange"/>
        </StackPanel>
    </Grid>
</Window>

Slider控件的一些属性简单介绍:
Orientation="Vertical"  System.Windows.Controls.Slider.Orientation 值之一。 默认值为 System.Windows.Controls.Orientation.Horizontal。
Value="0"  获取或设置范围控件的当前数量。
Height="80"  获取或设置元素的建议高度。
Maximum="255"  获取或设置的最大可能 System.Windows.Controls.Primitives.RangeBase.Value 范围元素。
Minimum="0"  获取或设置 System.Windows.Controls.Primitives.RangeBase.Minimum 可能 System.Windows.Controls.Primitives.RangeBase.Value 范围元素。
TickPlacement="BottomRight"  获取或设置与 System.Windows.Controls.Primitives.Track 的 System.Windows.Controls.Slider 相关的刻度线的位置。
TickFrequency="10"  获取或设置刻度线之间的间隔。
IsSnapToTickEnabled="True"  获取或设置一个值,该值指示 System.Windows.Controls.Slider 是否自动将 System.Windows.Controls.Primitives.Track.Thumb 移动到最近的刻度线。
Margin="0,0,5,0"  获取或设置元素的外边距。
AutoToolTipPlacement="BottomRight"  获取或设置在按下 System.Windows.Controls.Primitives.Track.Thumb 时是否显示包含 System.Windows.Controls.Slider 的当前值的工具提示。 如果显示工具提示,此属性还指定工具提示的位置。
AutoToolTipPrecision="2"  工具提示中显示的 System.Windows.Controls.Primitives.RangeBase.Value 的精度,由小数点右侧显示的小数位数指定。默认值为零 (0)。
ValueChanged="OnRedSliderValueChange"  范围值更改时发生。

2.C#代码

using System;
using System.Windows;
using System.Windows.Media;

namespace WpfApp
{
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window
    {
        double lRed = 0;
        double lGreen = 0;
        double lBlue = 0;
        double lOpacity = 255;
        public MainWindow()
        {
            InitializeComponent();
        }

        private void OnRedSliderValueChange(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            lRed = e.NewValue;
            Color clr = new Color();
            clr.R = Convert.ToByte(lRed);
            clr.G = Convert.ToByte(lGreen);
            clr.B = Convert.ToByte(lBlue);
            clr.A = Convert.ToByte(lOpacity);
            dispRect.Fill = new SolidColorBrush(clr);
        }

        private void OnGreenSliderValueChange(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            lGreen = e.NewValue;
            Color clr = new Color();
            clr.R = Convert.ToByte(lRed);
            clr.G = Convert.ToByte(lGreen);
            clr.B = Convert.ToByte(lBlue);
            clr.A = Convert.ToByte(lOpacity);
            dispRect.Fill = new SolidColorBrush(clr);
        }

        private void OnBlueSliderValueChange(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            lBlue = e.NewValue;
            Color clr = new Color();
            clr.R = Convert.ToByte(lRed);
            clr.G = Convert.ToByte(lGreen);
            clr.B = Convert.ToByte(lBlue);
            clr.A = Convert.ToByte(lOpacity);
            dispRect.Fill = new SolidColorBrush(clr);
        }

        private void OnOpacitySliderValueChange(object sender, RoutedPropertyChangedEventArgs<double> e)
        {
            lOpacity = e.NewValue;
            Color clr = new Color();
            clr.R = Convert.ToByte(lRed);
            clr.G = Convert.ToByte(lGreen);
            clr.B = Convert.ToByte(lBlue);
            clr.A = Convert.ToByte(lOpacity);
            dispRect.Fill = new SolidColorBrush(clr);
        }
    }
}

3.结果展示

posted @   槑孒  阅读(139)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
点击右上角即可分享
微信分享提示