2011-01-14 3 views
2

: I가 0.0에서 1.0으로 각각 적절한 컬러 및 불투명 세트 두 브러쉬를 만들려고 한투명 시스템 XAML에서 이러한 효과를 달성하는 방법 그라데이션 색 (WPF)

<LinearGradientBrush x:Key="BrightSeparatorGradient" StartPoint="0.0, 0.5" EndPoint="1.0, 0.5"> 
     <GradientStop Offset="0.0" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" /> <!-- But fully transparent --> 
     <GradientStop Offset="0.5" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" /> 
     <GradientStop Offset="1.0" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" /> <!-- But fully transparent --> 
    </LinearGradientBrush> 

있지만 컴파일러는 브러시를 색상으로 취하지 않 았습니다 (두 번째 생각에서 꽤 논리가 무엇입니까 :)).

안부 인사 - Spook.

답변

6

나는 Color를 받아 지정된 불투명도와 Color를 반환하는 MarkupExtension 만들 것입니다 :

public class OpacityExtension : MarkupExtension 
{ 
    private readonly Color color; 
    public byte Opacity { get; set; } // defaults to 0, so you don't have 
             // to set it for the color to be transparent 

    public OpacityExtension(Color color) 
    { 
     this.color = color;   
    } 

    public override object ProvideValue(IServiceProvider serviceProvider) 
    { 
     return Color.FromArgb(Opacity, color.R, color.G, color.B); 
    } 
} 

그리고 다음과 같이 사용 :

<LinearGradientBrush x:Key="BrightSeparatorGradient" StartPoint="0.0, 0.5" EndPoint="1.0, 0.5"> 
    <GradientStop Offset="0" Color="{lcl:Opacity {StaticResource {x:Static SystemColors.ControlLightColorKey}}}" /> 
    <GradientStop Offset=".5" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" /> 
    <GradientStop Offset="1" Color="{lcl:Opacity {StaticResource {x:Static SystemColors.ControlLightColorKey}}}" /> 
</LinearGradientBrush> 
+0

나는 그와 같은 구성이 존재한다는 것을 다소 기대하고있었습니다. XAML은 나를 놀라게하지 않습니다. 그건 물론 내 문제를 해결, 고마워. 그런데 궁금한 점이 있다면 여기 뭔가를 사용하여 동일한 결과를 얻을 수있는 방법이 있습니까? – Spook

+1

이와 비슷한 MarkupExtension을 사용할 수도 있습니다. 그런 식으로 사용할 수 있으려면 매개 변수없는 생성자를 추가하고 Color 필드를 설정 가능한 속성으로 만들어야합니다. 그러면 다음을 할 수 있습니다 : ... –

+0

{Lcl : Opacity {StaticResource {x : Static ... " 'System.Windows.Markup.StaticResourceHolder'형식의 콘텐츠를 ''유형의 개체에 추가 할 수 없습니다. 'System.Windows.Markup.StaticResourceHolder'개체에서 오류가 발생했습니다. 하지만 {lcl : Opacity {x : Static ... 을 지정하면 오류가 발생합니다. 그 이유를 아는 사람이 있습니까? – Krimson

0

놀래 킬을

다음 이유가 효과가없는 이유는 무엇입니까?

<LinearGradientBrush x:Key="BrightSeparatorGradient" StartPoint="0.0, 0.5" EndPoint="1.0, 0.5"> 
    <GradientStop Offset="0.0" Color="Transparent" /> 
    <GradientStop Offset="0.5" Color="{StaticResource {x:Static SystemColors.ControlLightColorKey}}" /> 
    <GradientStop Offset="1.0" Color="Transparent" /> 
</LinearGradientBrush> 
+2

# 00FFFFFF에서 # FF8080FF와 같은 시스템 색상이 될 수 있으므로 작동하지 않습니다. 그러면 알파 채널에서 페이드 아웃하는 대신 흰색에서 파란색으로 씻겨 나가는 전환이 생깁니다. –

+0

알았어요. 그렇다면 @Abe가 제안한 방법은 상당히 합리적입니다. – Anvaka

관련 문제