我想在WPF ListBoxItem中繪製一個基於矢量的圖形。例如,二維形狀非常簡單,線條或方形/矩形。但是編譯時不會知道形狀和顏色,所以它不能是圖像。如何在運行時在每個WPF ListBoxItem中繪製矢量圖形?
樣品截屏:http://i.stack.imgur.com/EisIQ.jpg(我微薄的代表阻止我張貼的圖片內嵌...)
我相信這應該是可能的WPF?如果是這樣,可能涉及Canvas和Rectangle元素?
非常感謝提前!
編輯
我被貌似只有找到將圖像添加到ListBoxItems的各種例子揭去,所以我真的沒有在挖。多虧了下面的答案讓我過上右腳。
XAML使用兩個DataTemplates和一個基於數據選擇正確模板的模板選擇器的聲明。顏色也被綁定到數據(屬性稱爲LayerColor)
<UserControl.Resources>
<!-- to convert the color -->
<src:ColorBrushConverter x:Key="colorConverter"/>
<!-- to select the correct template based on geom type -->
<src:LayerListDataTemplateSelector x:Key="layerDataTemplateSelector"/>
<DataTemplate x:Key="lineLayerTemplate">
<Border BorderThickness="0" BorderBrush="Gray"
Padding="5" Name="border" Margin="1" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Line Margin="5,0,5,0" Height="16"
X1="1" Y1="8"
X2="35" Y2="8"
Stroke="{Binding Path=LayerColor, Converter={StaticResource colorConverter}}"
StrokeThickness="2"/>
<TextBlock Grid.Row="0" Grid.Column="1" Margin="5,0,0,0"
Name="layerName" Text="{Binding Path=LayerName}"/>
</Grid>
</Border>
</DataTemplate>
<DataTemplate x:Key="pointLayerTemplate">
<Border BorderThickness="0" BorderBrush="Gray"
Padding="5" Name="border" Margin="1" >
<Grid>
<Grid.RowDefinitions>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50"/>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Polygon Grid.Row="0" Grid.Column="0" Margin="5,0,10,0"
Fill="{Binding Path=LayerColor, Converter={StaticResource colorConverter}}"
Stroke="Black" StrokeThickness="1"
StrokeLineJoin="Round" Width="16" Height="16"
Stretch="Fill"
Points="8,1 1,8 8,15 15,8 8,1"
Visibility="Visible" Name="diamond"/>
<TextBlock Grid.Row="0" Grid.Column="1" Margin="5,0,0,0"
Name="layerName" Text="{Binding Path=LayerName}"/>
</Grid>
</Border>
</DataTemplate>
</UserControl.Resources>
<Grid>
<ListBox x:Name="layerListBox" HorizontalContentAlignment="Stretch" HorizontalAlignment="Stretch"
ItemTemplateSelector="{StaticResource layerDataTemplateSelector}">
</ListBox>
</Grid>
哪個部位有問題?你有什麼嘗試? – 2011-04-07 17:38:25
根據我的編輯,沒有嘗試太多。但我想我現在在那裏。謝謝! – Josh 2011-04-11 19:31:37