WPF 简单渐变编辑器 (C#)






4.61/5 (18投票s)
C# 中 WPF 的简单渐变编辑器

引言
GradEditWPF
是一个为 WPF 设计的极其简单的渐变编辑器。它输出 XAML 代码,并允许轻松选择常用的系统颜色。
背景
Windows 演示框架 (WPF) 具有令人印象深刻的功能,但我找不到一个易于编辑或试验的渐变工具。为了解决这个小问题,我编写了这个极其简单的编辑器。
本项目中缺少一些有用的功能,例如任意设置任何 RGB 值以及更改每个 GradientStop
的大小。
Using the Code
GradEditWPF
旨在作为独立应用程序运行,以帮助开发人员/设计师为他们的 WPF 应用程序创建渐变。
应用程序界面

应用程序的顶部三分之一包含所有用于编辑渐变的功能。
- “色带”下拉菜单允许用户设置要使用的
GradientStop
数量。 System.Windows.Media.Color
组合框可以轻松选择系统颜色。- 滑块允许用户快速跳转到适当的
GradientStop
进行编辑。
线性渐变画笔的基本 XAML
<LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5">
<GradientStop Color="Black" Offset="0.0" />
<GradientStop Color="White" Offset="0.5" />
<GradientStop Color="Black" Offset="1.0" />
</LinearGradientBrush>
上面的代码将生成三个 GradientStop
(颜色带)黑色到白色到黑色的渐变,作为 LinearGradientBrush
。该软件的 XAML 输出旨在与此匹配。
系统颜色枚举(存储在 Dictionary.xaml 文件中)是从 http://stackoverflow.com/questions/562682/how-can-i-list-colors-with-wpf 借用的。
C# 代码有两个值得注意的方法
- 通过直接 WPF 操作的渐变预览逻辑
- 通过简单的 XML 生成的 XAML 输出
渐变预览逻辑
private void SetGradient()
{
if (gradrect == null)
return;
LinearGradientBrush lgbrush = (LinearGradientBrush)gradrect.Fill;
GradientStopCollection gscollection = lgbrush.GradientStops;
GradientStop g;
gscollection.Clear();
for (int i = 0; i < currentPaletteSize; i++)
{
g = new GradientStop();
g.Color = (Color)ColorConverter.ConvertFromString(colorNames[i]);
g.Offset = (float)i / (float)(currentPaletteSize - 1);
gscollection.Add(g);
}
Report();
}
上面的逻辑从应用程序的 XAML 文件中指定的渐变矩形获取当前的 LinearGradientBrush
。
然后它获取 GradientStop
集合,清除它,并继续将每个 GradientStop
设置为 colorNames
数组中包含的颜色。这些名称与 System.Windows.Media.Colors
条目相同。
XAML 输出
private void Report()
{
String report;
report = "";
double offset = 0;
report = "<LinearGradientBrush StartPoint=\"0,0.5\" EndPoint=\"1,0.5\">\n";
for (int i = 0; i < currentPaletteSize; i++)
{
if (currentPaletteSize > 0)
offset = (double)i / (double)(currentPaletteSize - 1);
else offset = 0;
report += "\t<GradientStop Color=\"#" + colorNames[i]
+ "\" Offset=\"" + offset + "\" />\n";
}
report += "</LinearGradientBrush>\n";
if (textBoxGradXML!=null)
textBoxGradXML.Text = report;
}
XAML 输出代码非常简单。它创建一个包含从 colorNames
数组中提取的每个 GradientStop
颜色的名称的单个 string
,最后将文本框设置为该 string
。
关注点
作为 WPF 世界的入门项目,我发现编写一个我可以用来引导进一步 WPF 开发的简单工具非常有趣。我希望至少还有一位开发人员觉得该工具或技术有用。
历史
在初始上传中删除了一个字符 - 一个字母(XAML 输出代码中的多余 #)确实可能导致软件出现严重故障。