2011-11-29 39 views
0

我有看起來數據模板的定義如下:動態刷in 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具有稱爲ColourColor類型被綁定到的第一顏色的一個屬性LinearGradientBrush填充邊框,使其看起來像填充的矩形。

現在我並不總是希望線性漸變筆刷設計這個矩形的填充。例如,我的畫布上的某些矩形可能需要填充SolidBrushes。我認爲建立在BlockItem類而不是一個Color屬性Brush財產和有約束力的整個Border.Background到,但有2個問題是:

  • 我不知道XAML看起來應該指定一個綁定到整個對象Background屬性。
  • 在我創建BlockItem的代碼中,如果我爲每個BlockItem實例化一個新的Brush(記住,可能有許多在一個畫布上繪製),這會不會使它效率低下和速度慢?

回答

0

1)您可以在後臺直接綁定到一個刷上你的BlockItem:

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

2)你可以綁定到一個靜態資源,或爲您的BlockItem一個靜電刷。

Background="{StaticResource myStaticBrush}"