1

私は 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>

最良のオプションは、その IconData プロパティを .png ファイルから設定できることだと思いますが、コードでそれを行う方法がわかりません。

4

1 に答える 1

1

見つけた!私の場合、コードは次のとおりです。

                  var streamGeometry = StreamGeometry.Parse("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 ");
                    sortButton.IconData = streamGeometry;

多分これは誰かに役立つでしょう。

于 2013-07-02T23:52:17.747 に答える