XAML中的动态画笔

时间:2011-11-29 08:57:47

标签: wpf drawing paint brush

我有一个数据模板的定义,如下所示:

<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有一个名为Color的{​​{1}}类型的属性,该属性绑定到填充边框的Colour的第一种颜色,使其成为看起来像一个填充的矩形。

现在我并不总是希望使用线性渐变笔刷来设置此矩形的填充样式。例如,我的画布上的某些矩形可能需要填充SolidBrushes。我考虑在LinearGradientBrush类而不是Brush属性上创建BlockItem属性,并将整个Color绑定到该属性,但是有两个问题:

  • 我不知道XAML应该如何指定对整个对象Border.Background属性的绑定。
  • 在我创建Background的代码中,如果我为每个BlockItem实例化一个新的Brush(请记住,一次可能在画布上绘制很多),这不会真的低效而缓慢?

1 个答案:

答案 0 :(得分:0)

1)您可以将Background直接绑定到BlockItem上的画笔:

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

2)您可以绑定到静态资源,或为BlockItem创建静态画笔。

Background="{StaticResource myStaticBrush}"