2017-12-12 22 views
0

나는 내 응용 프로그램에서 사용하고있는 많은 아이콘이 있습니다."Prettify"Xaml 필요 : 긴 PathGeometry "Figures"특성 문자열을 XML 구문으로 변환

<PathGeometry x:Key="RunPathGeometry" 
       Figures="M56.11 46.17 69.2 33.09a25.29 25.29 0 1 0 4.41 27H85.16l.1 0q-.25.91-.57 1.8A36.32 36.32 0 1 1 77 25.3l8.92-8.92V46.17Z" 
       FillRule="NonZero" 
       /> 

을 지금이 잘 작동하지만 일부 아이콘이 속성 문자열 너무 오래 너무 복잡하고 : PathGeometry이 같은 특성 구문에 지정된 숫자 개체에서 나는 XAML 리소스 사전을 가지고 문자 그대로 - 30,000 개 이상의 텍스트 열이 있습니다.

나는 매우 그것이 나에게 라인 대신 의 톤을 제공하기 때문 만이이 속성 구문으로 표현해야하는 것을 선호합니다. 내가 살 수있는 라인 (그리고 훨씬 더 적은 30,000 ...)

나를 위해 이렇게 할 수있는 몇 가지 간단한 방법/변환기 사람이 있습니까? PathGeometry에 하나의 형식으로 붙여 넣을 수있는 곳은 어디입니까? 나는 가능성이 XamlReader/XamlWriter 하나에게 자신을 쓸 수 있지만, 차라리 바퀴를 재발견하고 누군가가 이미있는 경우이 작업을 수행하는 모든 사이클을 구울하지 않는 게 좋을 것 같습니다 워드 프로세서 감추고

은 ...

편집 - 누군가가 물어 본 이래로 "속성"구문이 의미하는 것은 숫자가 속성이 아닌 닫힌 XML 태그로 표현되는 부분입니다. 아래의 예처럼 뭔가 (그것은 간단한 삼각형 예를 들어 사실이다하지만 더 복잡한 모양뿐만 아니라 표현 될 수있다.)

<Path Stroke="Black" StrokeThickness="1"> 
    <Path.Data> 
     <PathGeometry> 
      <PathGeometry.Figures> 
       <PathFigureCollection> 
        <PathFigure IsClosed="True" StartPoint="10,100"> 
         <PathFigure.Segments> 
          <PathSegmentCollection> 
           <LineSegment Point="100,100" /> 
           <LineSegment Point="100,50" /> 
          </PathSegmentCollection> 
         </PathFigure.Segments> 
        </PathFigure> 
       </PathFigureCollection> 
      </PathGeometry.Figures> 
     </PathGeometry> 
    </Path.Data> 
</Path> 
+1

"속성 구문"이란 무엇입니까? –

+0

각 내부 요소는 닫힌 xml 태그로 표현됩니다. 나는 PathSigmentCollection 태그를 포함하는 PathGeometry 태그를 가지고 있습니다. PathFigure 태그에는 PathSigmentCeglectionTag가 들어있는 PathFigure.Segments 태그가 포함되어 있습니다.이 태그에는 LineSegment 태그 (또는 ArcSegment, BezierSegment 등)가 들어 있습니다. 말 수가 많은? 확실히 – Joe

답변

1

우리는 리소스 사전에 이들의 무리를 가지고 우리는 매우 행복했습니다 그와 함께 :

<PathGeometry x:Key="SearchGlyphPathGeometry" x:Shared="True" FillRule="EvenOdd"> 
    <PathGeometry.Figures> 
     M 25,13 
     A 12,12, 0,1,1, 13,25 
     A 12,12, 0,0,1, 25,13 
     Z 
     M 35.8,41.8 
     A 20,20, 0,0,1, 5,25 
     A 20,20, 0,1,1, 41.8,35.8 
     L 57,51 
     L 51,57 
     Z 
    </PathGeometry.Figures> 
</PathGeometry> 

사용과 같이 :

<Path Data="{StaticResource SearchGlyphPathGeometry}" Fill="DeepSkyBlue" /> 

그것은 충분히 펄을 사용하거나 경로 문자열의 모든 알파 문자 앞에 줄 바꿈을 삽입 나오지도 간단하다. 또는 C 번호 :

var re = new Regex("([a-z])", RegexOptions.IgnoreCase); 
var s = re.Replace(PathGeometryText, "\n\t\t\t$1"); 

당신은 반복적으로, 위의 정규식으로 Figures 속성 값을 변환, PathGeometry 요소를 찾아, XAML 파일의 프로젝트 디렉토리를 검색 속성을 제거하고 자식 요소를 대신 추가하는 코드를 작성할 수 :

<PathGeometry x:Key="RunPathGeometry" FillRule="NonZero"> 
    <PathGeometry.Figures> 

     M56.11 46.17 69.2 33.09 
     a25.29 25.29 0 1 0 4.41 27 
     H85.16 
     l.1 0 
     q-.25.91-.57 1.8 
     A36.32 36.32 0 1 1 77 25.3 
     l8.92-8.92 
     V46.17 
     Z 
    </PathGeometry.Figures> 
</PathGeometry> 

또한 do something about that mildly annoying orphan newline 정규식은 텍스트 앞에 있습니다.

원래 아이디어로는 문자열에서 PathGeometry 인스턴스를 인스턴스화하고이를 XAML로 직렬화하는 간단한 C# 코드를 작성할 수 있지만 위의 내용은 적어도 읽기 가능하고 작동하지 않는 것 같습니다.

+0

안녕하세요 고마워, 기본적으로 내가 뭘하려고하는지. 필자는 "Figure"태그 안에 개행 문자로 분리 된 원시 값과 같은 경로 모양 구문을 삽입 할 수 있는지 몰랐습니다. 나는 그것이 한 줄에 따옴표로 묶인 문자열에 있어야한다고 생각했다.이렇게하면 가독성이 크게 향상됩니다. 그러나 여전히 질문 : 30,000 자의 경로 그림 구문 문자열을 이와 같이 변환하려면 어떻게해야합니까? 나는 단지 하나의 아이콘 만 가지고 있더라도 그것을 수동으로하고 싶지 않을 것입니다! 다시 말해서, 나는 그것을 쓸 수 있다고 확신한다. 나는 누군가가 이미 그걸 가지고 있었으면 좋겠다. – Joe

+1

@Joe 업데이트보기 –

+0

당신의 도움에 감사드립니다. Sed와 정규 표현식은 항상 내가 마스터하고 싶지만 시간이 없다는 것 중 하나입니다. 나는 항상 내 일을 끝내고 다른 일들로 넘어 가기에 충분한 것을 배운다. 지난 1 시간 동안 Sed와 싸우며 올바른 선택을하고 비슷한 일을 할 수있었습니다. 이것은 내 sed 스크립트입니다 : 어떤 일을하는 것처럼 보입니다 s/([MmLlHhVvCcQqSsTtAa])/[편집] – Joe