Динамические кисти в XAML - PullRequest
0 голосов
/ 29 ноября 2011

У меня есть определение для шаблона данных, которое выглядит следующим образом:

<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, называемое Colour, которое связано спервый цвет LinearGradientBrush, который заполняет границу, делая ее похожей на закрашенный прямоугольник.

Теперь я не всегда хочу, чтобы линейные градиентные кисти создавали стиль заливки этого прямоугольника.Например, некоторые прямоугольники на моем холсте могут быть заполнены SolidBrushes.Я подумал о создании свойства Brush в классе BlockItem вместо свойства Color и привязке к нему всего Border.Background, но с этим есть 2 проблемы:

  • Я надеваюне знаю, как должен выглядеть XAML для указания привязки ко всему свойству объекта Background.
  • В коде, где я создаю BlockItem s, если я создаю новую Brush для каждого отдельного BlockItemпомните, что на холсте одновременно может быть нарисовано много людей), разве это не сделает его действительно неэффективным и медленным?

1 Ответ

0 голосов
/ 29 ноября 2011

1) Вы можете привязать фон непосредственно к кисти на вашем BlockItem:

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

2) Вы можете привязать статический ресурс или создать статическую кисть для вашего BlockItem.

Background="{StaticResource myStaticBrush}"
...