자동

2013-07-04 2 views
0

우리는 다음과 같습니다 확장 일부 번역 마크를 가지고 :자동

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

를 장착하는 데 (우리는 XAML의 번역을 위해 다른 도구를 사용할 수 있기 때문에) 우리가 원하는 모든 프로젝트 xamls 내에 텍스트 태그가 자동으로 추가됩니다.

이 경우를 구현하기 위해 regex 또는 xml reader/write를 사용하여 모든 노드 또는 속성을 찾을 수있는 방법이 있습니까?

+0

나는 당신이 원하는 것을 정확히 모르겠다. 그러나 여러 TextBlock 요소 텍스트를 동시에 변경한다면, 요소를 공통 속성에 바인딩하고 필요에 따라 속성을 수정하는 것을 고려해야한다. – Killingsworth

+0

우리는 Visual Studio addin 같은 xaml 파일 내에서 Text = ""같은 요소를 자동으로 바꾸기를 원합니다. – Creator

+0

죄송합니다. 내가 도울 수 있기를 바란다. 그러나 나는 내가 전에 그와 같은 무엇이라도 필요로했다라고 생각하지 않는다 (ctrl + r 외에). – Killingsworth

답변

0

우리는 가장 좋은 방법이 아니다 정규 표현식을 사용했지만 우리는 그것으로 남길 수 있습니다.

0

기본적으로 XAML은 표준 XML을 충족하지만이 기능을 사용하려면 외부 라이브러리가 필요합니다. 예 : Microsoft XAML Toolkit CTP (download). 문서의 모든 Control

// 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 : 항목의 목록을 표시 간단한 예를 들어,

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"); 
} 
:

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 특성의 값을 대체, 나는 예제를 사용

파일 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> 
+0

XAML 요소의 내용을 설정할 수 있습니까? 예 : 텍스트? – Creator

+0

가능합니다. 그러나 아마도 '제어'의 유형에 달려 있습니다. 제 편집문을 보시고,''를 사용했습니다. 자세한 내용은 설명서를 참조하십시오. –

+0

이 프레임 워크를 사용하여 콘텐츠를 변경하는 방법을 알고 싶습니다. – Creator