iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C# wpf简单颜色板的实现
  • 446
分享到

C# wpf简单颜色板的实现

2024-04-02 19:04:59 446人浏览 八月长安
摘要

目录前言一、如何实现?1、使用ObjectDataProvider2、定义转换器3、绑定容器二、使用示例1.代码2.显示效果前言 WPF本身没有提供颜色板之类的控件,有些业务使用场

前言

WPF本身没有提供颜色板之类的控件,有些业务使用场景需要使用颜色板之类的控件,比如设置弹幕的颜色或设置文本的颜色等。这里提供一种颜色板的简单实现方法。

一、如何实现?

1、使用ObjectDataProvider

ObjectDataProvider是wpf中xaml绑定.net任意t类型的媒介,通过ObjectDataProvider可以直接获取到System.windows.Media.Brushes类的属性列表。System.Windows.Media.Brushes中定义了常见的颜色刷子。

2、定义转换器

由于ObjectDataProvider获取的Brushes属性集合反射集合,并不是直接的Brush对象,所以需要进行数据的转换,定义一个转换器,将属性(PropertyInfo)转换成Brush对象。

3、绑定容器

绑定容器的ItemsSource属性并使用上述的转换器,通过定义ItemTemplate自定义颜色的显示控件。

二、使用示例

本示例使用的是ComboBox作为容器显示颜色板。

1.代码

xaml代码如下(示例):


<Window x:Class="WpfApp1.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:sys="clr-namespace:System;assembly=mscorlib"
        xmlns:local="clr-namespace:WpfApp1"     
        mc:Ignorable="d"
        Title="MainWindow" Height="720" Width="1280">
    <Window.Resources>
        <ResourceDictionary>
            <ObjectDataProvider    ObjectInstance="{x:Type Brushes}"    MethodName="GetProperties"    x:Key="Brushes" />
            <local:BrushTypeConverter  x:Key="BrushTypeConverter"></local:BrushTypeConverter>
        </ResourceDictionary>
    </Window.Resources>
    <Grid>
        <ComboBox Margin="0,-200,0,0"  Width="240" Height="60" ItemsSource="{Binding Source={StaticResource Brushes}}"     SelectedItem="{Binding  ForeColor}">
            <ComboBox.ItemContainerStyle>
                <Style TargetType="ComboBoxItem">
                    <Setter Property="Template" >
                        <Setter.Value>
                            <ControlTemplate TargetType="ComboBoxItem">
                                <Rectangle Width="210"  Height="46" Margin="2,2,2,2" Stroke="#cccccc" StrokeThickness="1" RadiusX="5"   RadiusY="5"  Fill="{Binding RelativeSource={x:Static RelativeSource.Self},Path=DataContext,Converter={StaticResource BrushTypeConverter}}"></Rectangle>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </ComboBox.ItemContainerStyle>
            <ComboBox.Template>
                <ControlTemplate  TargetType="ComboBox">
                    <Grid>
                        <ToggleButton  Cursor="Hand" BorderThickness="0"  BorderBrush="Transparent"  Panel.ZIndex="1"     IsChecked="{Binding Path=IsDropDownOpen, Mode=TwoWay, RelativeSource={RelativeSource TemplatedParent}}" ClickMode="Press">
                            <ToggleButton.Template>
                                <ControlTemplate>
                                    <StackPanel Orientation="Horizontal" Background="Transparent">
                                        <Rectangle Width="210" Height="46" Margin="7,0,5,0"   Stroke="#cccccc" StrokeThickness="1" RadiusX="5"   RadiusY="5"  Fill="{Binding SelectedItem, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ComboBox}},Converter={StaticResource BrushTypeConverter}}"></Rectangle>
                                        <Polyline  Grid.Column="1"  Points="0,0 5,6 10,0"   Margin="0,0,10,0"   Width="10"  Height="6"  Stretch="Fill"  Stroke="Black"  StrokeThickness="1" />
                                    </StackPanel>
                                </ControlTemplate>
                            </ToggleButton.Template>
                        </ToggleButton>
                        <Popup IsOpen="{TemplateBinding IsDropDownOpen}" Placement="Bottom" x:Name="Popup" Focusable="False" AllowsTransparency="True" PopupAnimation="Slide">
                            <Border CornerRadius="1" MaxHeight="{TemplateBinding MaxDropDownHeight}" MinWidth="{TemplateBinding ActualWidth}" x:Name="DropDown" SnapsToDevicePixels="True">
                                <ScrollViewer Margin="4,6,4,6"  MaxHeight="{TemplateBinding MaxDropDownHeight}" SnapsToDevicePixels="True" HorizontalScrollBarVisibility="Auto" VerticalScrollBarVisibility="Auto" CanContentScroll="True">
                                    <!--StackPanel 用于显示子级,方法是将 IsItemsHost 设置为 True-->
                                    <StackPanel IsItemsHost="True" KeyboardNavigation.DirectionalNavigation="Contained" Background="White"/>
                                </ScrollViewer>
                            </Border>
                        </Popup>
                    </Grid>
                </ControlTemplate>
            </ComboBox.Template>
        </ComboBox>
    </Grid>
</Window>

转换器代码如下(示例):


    public class BrushTypeConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (value == null)
                return null;
            PropertyInfo propertyInfo = value as PropertyInfo;
            return propertyInfo.GetValue(value) as SolidColorBrush;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            return null;
        }
    }

2.显示效果

效果如下(示例):

到此这篇关于C# wpf简单颜色板的实现的文章就介绍到这了,更多相关C# wpf 颜色板内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: C# wpf简单颜色板的实现

本文链接: https://www.lsjlt.com/news/154642.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C# wpf简单颜色板的实现
    目录前言一、如何实现?1、使用ObjectDataProvider2、定义转换器3、绑定容器二、使用示例1.代码2.显示效果前言 wpf本身没有提供颜色板之类的控件,有些业务使用场...
    99+
    2024-04-02
  • 【HTML颜色:一个简单易学的调色板】
    HTML 颜色是一种用于在网页和应用程序中指定颜色的系统。它使用十六进制代码来表示颜色,例如红色可以表示为“#FF0000”,绿色可以表示为“#00FF00”,蓝色可以表示为“#0000FF”。 HTML 颜色可以分为三类:基本颜色、辅...
    99+
    2024-02-14
    HTML 颜色 颜色代码 调色板 网页设计
  • C#中WPF颜色对话框控件的实现
    在 C# WPF开发中颜色对话框控件(ColorDialog)用于对界面中的背景、文字…(拥有颜色属性的所有控件)设置颜色,例如设置标签控件的背景色。 颜色对话框的运行...
    99+
    2024-04-02
  • jQuery实现简单的按钮颜色变化
    在HTML和CSS中我们想要完成一个对按钮颜色的设置,虽然也可以做到想要的效果,但过程比较繁琐,利用jQuery我们就可以轻松的完成这件事情。 假设现在我们有一组按钮 当我们点击其...
    99+
    2024-04-02
  • 怎么用jQuery实现简单的按钮颜色变化
    本篇内容主要讲解“怎么用jQuery实现简单的按钮颜色变化”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用jQuery实现简单的按钮颜色变化”吧!在HTML和CSS中我们想要完成一个对按钮颜...
    99+
    2023-06-20
  • opencv C++模板匹配的简单实现
    目录一简单实现二函数及原理讲解1matchTemplate()参数详解2minMaxLoc()函数一 简单实现 #include <opencv2/opencv.hpp>...
    99+
    2024-04-02
  • Python-OpenCV实现简单的颜色识别(对红色和蓝色识别并输出)
    摄像头识别红色和蓝色并框选,当该颜色为摄像头屏幕上大多数颜色时打印出该颜色的名称 新手学习笔记,第一次写博客,若有错误还请指出( ~`_` )~ 1.调包 import cv2import numpy as npfrom matpl...
    99+
    2023-09-08
    python opencv 计算机视觉
  • C++实现LeetCode(75.颜色排序)
    [LeetCode] 75. Sort Colors 颜色排序 Given an array with n objects colored red, white ...
    99+
    2024-04-02
  • C++怎么实现颜色排序
    这篇文章主要介绍了C++怎么实现颜色排序的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇C++怎么实现颜色排序文章都会有所收获,下面我们一起来看看吧。颜色排序Example:Input: [2,0,2,1,1,0...
    99+
    2023-06-19
  • JavaScriptDOM实现简单留言板
    本文实例为大家分享了JavaScript DOM实现简单留言板的具体代码,供大家参考,具体内容如下 效果图: 先准备html代码: <body>     <tex...
    99+
    2024-04-02
  • Java实现简单小画板
    Java制作简单画板,包括两个类,一个主要画板类Drawpad,一个画板监听器DrawListener类。 1、Drawpad类,包括画板,画板功能设计,保存图片等 package ...
    99+
    2024-04-02
  • c# 颜色选择控件的实现代码
    参考ColorComboBox做修改,并对颜色名做些修正,用于CR MVMixer产品中,聊作备忘~ 效果图: 代码: //颜色拾取框 using System; using ...
    99+
    2024-04-02
  • 如何用JS代码实现简单面向对象的颜色选择器
    今天小编给大家分享一下如何用JS代码实现简单面向对象的颜色选择器的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。具体代码如下:...
    99+
    2023-07-04
  • C++ vector的简单实现
    目录向量成员函数cpp总结向量 向量是序列容器,表示可以更改大小的数组。 就像数组一样,向量对其元素使用连续的存储位置,这意味着也可以使用指向其元素的常规指针上的偏移量来访问其元素,...
    99+
    2024-04-02
  • 基于WPF实现简单放大镜效果
    WPF 如何实现简单放大镜 框架使用.NET40; Visual Studio 2019; 实现此功能需要用到 VisualBrush ,放大镜展现使用 ...
    99+
    2022-12-27
    WPF放大镜效果 WPF放大镜
  • Java如何实现简单画板
    本文小编为大家详细介绍“Java如何实现简单画板”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java如何实现简单画板”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、代码先直接上代码吧,备注大部分都在代码中。...
    99+
    2023-07-02
  • Android Studio实现简单绘图板
    本文实例为大家分享了Android Studio实现简单绘图板的具体代码,供大家参考,具体内容如下 目的 设计一个手绘图形的画板 工具及环境 使用java语言,在Android st...
    99+
    2024-04-02
  • Java实现简单画画画板
    用Java实现简单的画画画板,供大家参考,具体内容如下 一、代码 先直接上代码吧,备注大部分都在代码中。 import java.awt.*; import javax.swing....
    99+
    2024-04-02
  • Java Swing实现画板的简单操作
    Java Swing 画板的操作(修改颜色,更改图形,清除,任务栏按钮),供大家参考,具体内容如下 话不多说,直接看代码 package Swing; import javax.sw...
    99+
    2024-04-02
  • 基于WPF实现简单的下拉筛选控件
    WPF 简单实现下拉筛选控件 框架使用.NET40; Visual Studio 2022; 使用 ICollectionView[2] 实现筛选功能,还支持其他...
    99+
    2023-05-14
    WPF实现下拉筛选控件 WPF下拉筛选控件 WPF下拉控件
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作