2011-11-29 36 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}"