0

次のような翻訳マークアップ拡張機能があります。

TextBlock Text="{l:Translate 'My string'}"

そして、すべてのプロジェクト xaml 内のテキスト タグを自動的に置き換える必要があります (xaml の翻訳に他のツールを使用できるため)。

このケースを実装するために、正規表現またはxmlリーダー/書き込みを使用してすべてのノードまたは属性を見つける方法はありますか?

4

2 に答える 2

0

基本的にXAML、標準を満たしていXMLますが、それを使用するには、外部ライブラリが必要です。例: Microsoft XAML Toolkit CTP(ダウンロード)。アイテムのリストを表示する簡単な例:

// Previously adding the library
using Microsoft.Xaml.Tools.XamlDom;

XamlDomObject rootObject = XamlDomServices.Load("MainWindow.xaml");

foreach (XamlDomObject domObject in rootObject.DescendantsAndSelf())
{
    MessageBox.Show(domObject.Type.ToString());
}

Backgroundドキュメント内のすべてに設定しControlます。

XamlDomObject rootObject = XamlDomServices.Load("MainWindow.xaml");
    foreach (XamlDomObject objectNode in
        from control in rootObject.DescendantsAndSelf(typeof(Control))
        where !control.HasMember("Background")
        select control)
{
    objectNode.SetMemberValue("Background", "Red");
}

XamlDomServices.Save(rootObject, "NewFile.xaml");

Textプロパティの値を置き換えるには、例を使用します。

private void Window_ContentRendered(object sender, EventArgs e)
{
    XamlDomObject rootObject = XamlDomServices.Load("MainWindow.xaml");

    foreach (XamlDomObject objectNode in
            from control in rootObject.DescendantsAndSelf(typeof(TextBlock))
            where control.HasMember("Text")
            select control)
    {
            objectNode.SetMemberValue("Text", "MyInsertedText");
    }

    XamlDomServices.Save(rootObject, "NewFile.xaml");
} 

ファイルInput:

<Window x:Class="XAMLdom.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525" ContentRendered="Window_ContentRendered">

    <Grid>
        <TextBlock Text="SomeText" Width="100" Height="30" />
    </Grid>
</Window>

ファイルOutput:

<?xml version="1.0" encoding="utf-8"?>
<Window xml:base="file:///C:/Documents and Settings/Kanc/мои документы/visual studio 2010/Projects/XAMLdom/XAMLdom/bin/Debug/MainWindow.xaml" x:Class="XAMLdom.MainWindow" Title="MainWindow" Height="350" Width="525" ContentRendered="Window_ContentRendered" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
    <Grid>
        <TextBlock Text="MyInsertedText" Width="100" Height="30" />
    </Grid>
</Window>
于 2013-07-05T04:44:29.357 に答える
0

正規表現を使用しましたが、これは最善の方法ではありませんが、そのままにしておくことができます。

于 2013-07-16T08:38:27.450 に答える