2013-10-15 1 views
2

다음을 고려하십시오. LinearGadientBrush, 'A'. 일반적으로 브러시를 사각형의 배경으로 지정하면 크기에 관계없이 전체 영역이 전체 그라데이션으로 채워집니다. (B 참조). GradientBrush의 비율 만 렌더링 할 수 있습니까?

우리는 '이 특정 컨트롤의 경우 만 채우기위한 브러시의 첫 번째 사람 XX %를 활용하는'우리가 'C'처럼, 백분율 기반의 그라데이션 채우기를 달성 할 수있는 말하려고하고 있습니다.

enter image description here

참고 : 우리는 시스템이 자동으로 비율이 무엇을 나타내는 지 계산할 수있는 방법이 없기 때문에 표시 할 비율에 대한 책임거야 알고있다.

우리가 현재하고있는 방식은 'D'로 표시됩니다. 우리는 우리가 필요로하는 크기의 100 % 사각형을 정의하고 (그래서 채우기는 100 %입니다), 다른 컨트롤 안에 배치하고 왼쪽 정렬합니다. 그런 다음 외부 컨트롤의 ClipsToBounds을 true로 설정하고 폭을 원하는 내부 사각형의 백분율로 설정합니다. (D 참조)이 접근법은 효과적이지만 가능한 경우 제거하려고하는 시각적 트리에 추가 요소를 추가합니다.

답변

1

LinearGradientBrush의 EndPoint 속성을 사용하십시오. 귀하의 경우에는 EndPoint="2,0"을 설정하면 원하는 결과를 얻을 수 있습니다. 당신이 더 역동적 일을해야하는 경우

끝점 속성에 점 개체를 바인딩 할 수 있습니다. 값을 1,0로 설정하면 그라디언트의 100 %를 표시하거나 2,0을 사용하여 그라디언트의 처음 50 %를 표시합니다.

StartPoint

는 그라데이션의 반대편에 같은 일을 수행 할 수 있습니다.

+0

... 닫기 MSDN에서 예를 들어, 그러나 여기에서 문제가있다. StartPoint 및 EndPoint는 브러시 자체의 속성이기 때문에 값 당 하나의 브러시 인스턴스가 렌더링되어야합니다. 그래도 정확한 정보가 아니라면 MappingMode를 사용하여 동일한 효과를 얻었습니다. – MarqueIV

1

발견. 브러쉬의 MappingMode입니다. 이 값을 Absolute로 설정하면 실제 좌표로 표시되고 컨트롤의 백분율로 표시되지 않습니다. 즉, '전체'너비가 240 단위 인 경우 끝점을 240으로 설정합니다. (GradientStop 오프셋은 항상 StartPoint와 EndPoint 사이의 거리의 백분율)

렌더링 할 컨트롤의 '너비'당 하나의 브러시가 필요합니다. 이는 200 개의 너비에 10 개의 막대 그래프가 있고 6 개의 막대 그래프가 폭이 150 유닛이라면 두 개의 브러시가 필요합니다.

여기

<!-- The MappingMode property is set to "Absolute" which specifies that the coordinate 
    system used for the StartPoint and EndPoint properties is not relative to the 
    Brush output area. Values are interpreted directly in local space. --> 

<!-- Create a brush that is absolutely 200 units wide --> 
<LinearGradientBrush MappingMode="Absolute" 
    StartPoint="0,0" EndPoint="200,0"> 

    <GradientStop Color="Yellow" Offset="0" /> 
    <GradientStop Color="Red"  Offset="0.25" /> 
    <GradientStop Color="Blue"  Offset="0.75" /> 
    <GradientStop Color="LimeGreen" Offset="1" /> 

</LinearGradientBrush> 
관련 문제