我正在使用 ModernUI,有一个叫做“现代按钮”的东西,它基本上是按钮,但具有不同的皮肤。特殊的特征是按钮中图像的绘制方式:它使用 PathGeometry。可以在此站点上找到此几何图形。我需要的是以编程方式代码隐藏更改 PathGeometry。我知道如何在 XAML 中执行此操作,例如:
IconData="F1 M 19.0002,34L 19.0002,42L 43.7502,42L 33.7502,52L 44.2502,52L 58.2502,38L 44.2502,24L 33.7502,24L 43.7502,34L 19.0002,34 Z " />
那根法杖代表一支箭。
但我不能做同样的代码隐藏,我想我需要某种转换。在 ModernUI 的源代码中,我发现这段代码放置了一堆引用的按钮。这对我来说也是一个不错的选择。
public ControlsModernButton()
{
InitializeComponent();
// find all embedded XAML icon files
var assembly = GetType().Assembly;
var iconResourceNames = from name in assembly.GetManifestResourceNames()
where name.StartsWith("FirstFloor.ModernUI.App.Assets.appbar.")
select name;
foreach (var name in iconResourceNames)
{
// load the resource stream
using (var stream = assembly.GetManifestResourceStream(name))
{
// parse the icon data using xml
var doc = XDocument.Load(stream);
var path = doc.Root.Element("{http://schemas.microsoft.com/winfx/2006/xaml/presentation}Path");
if (path != null) {
var data = (string)path.Attribute("Data");
// create a modern button and add it to the button panel
ButtonPanel.Children.Add(new ModernButton {
IconData = PathGeometry.Parse(data),
Margin = new Thickness(0, 0, 4, 8)
});
}
}
}
}
与我的情况不同的是,我不想创建一个新按钮,而是更改它的 IconData 属性。
该文件(包含几何图形的文件)内部具有以下结构:
<?xml version="1.0" encoding="utf-8"?>
<Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="appbar_add" Width="76" Height="76" Clip="F1 M 0,0L 76,0L 76,76L 0,76L 0,0">
<Path Width="38" Height="38" Canvas.Left="19" Canvas.Top="19" Stretch="Fill" Fill="#FF000000" Data="F1 M 35,19L 41,19L 41,35L 57,35L 57,41L 41,41L 41,57L 35,57L 35,41L 19,41L 19,35L 35,35L 35,19 Z "/>
</Canvas>
我认为最好的选择是能够从 .png 文件中设置 IconData 属性,但我不知道在代码中这样做的方式。