2011-11-29 3 views
0

에서 나는 보이는 데이터 템플릿에 대한 정의가 있습니다동적 브러쉬 XAML

<DataTemplate DataType="{x:Type HeatMap:BlockItem}"> 
     <Grid Visibility="{Binding IsVisible}"> 
      <Border Name="BlockBorder" Width="{Binding Width}" Height="{Binding Height}"> 
       <Border.Background> 
        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> 
         <GradientStop Color="{Binding Colour}" Offset="1"/> 
         <GradientStop Color="White"/> 
        </LinearGradientBrush> 
       </Border.Background> 
      </Border> 
     </Grid> 
    </DataTemplate> 
에서 볼 수있는 바와 같이

BlockItem는 첫 번째 색상에 바인딩 Colour라는 유형 Color의 속성을 가지고 LinearGradientBrush은 테두리를 채우며 채워진 사각형처럼 보입니다.

이제 Linear Gradient Brushes가이 사각형의 채우기 스타일을 지정하는 것은 아닙니다. 내 캔버스의 일부 직사각형은 예를 들어 SolidBrushes로 채워 져야 할 수 있습니다. 내가 대신 Color 속성의 BlockItem 클래스에 Brush 속성을 만들고 그것 전체 Border.Background 결합으로 간주하지만,이 문제는이에있다 :

  • 나는 XAML이를 지정하는 보여야 방법을 모른다 전체 개체 Background 속성에 바인딩
  • BlockItem을 생성하는 코드에서 모든 단일 BlockItem에 대해 새 브러시를 인스턴스화하면 (실제로 염두에 둬야합니다. 한 번에 여러 개의 캔버스가 그려지는 경우가 있습니다),이 작업이 실제로 비효율적이며 느려지지는 않을까요?

답변

0

1) 당신은 당신의 BlockItem에 브러시에 직접 배경을 결합 할 수 있습니다

<Border Name="BlockBorder" Background="{Binding MyBackgroundBrush}"> 

2) 당신은 정적 리소스에 바인딩하거나 BlockItem에 대한 정적 브러쉬를 만들 수 있습니다.

Background="{StaticResource myStaticBrush}"