我是WPF的新手,我正在制作一个有矩形和信息的传奇。 Here is an example of the Legend
这是xmal
<ItemsControl Name="icColorInfo" ItemsSource="{Binding m_legendInfo}"
BorderBrush="DarkBlue" BorderThickness="2">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="2,2,2,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle Grid.Column="0" Height="25" Width="30" Fill="{Binding Color}"></Rectangle>
<TextBlock Grid.Column="1" Text="{Binding Info}"></TextBlock>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
矩形Fill绑定到我的图例类的颜色属性 textblock绑定到info属性
现在我要做的是,如果图例“信息”条目等于“空”,我希望矩形有一个虚线边框(可能设置Stroke属性或其他)
如何在不影响其他项目的情况下绑定到特定项目?
答案 0 :(得分:3)
DataTrigger
中的简单ItemTemplate
可以为您做到这一点:
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="2,2,2,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="100" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Rectangle x:Name="rect" Height="25" Width="30" Fill="{Binding Color}" />
<TextBlock Grid.Column="1" Text="{Binding Info}" />
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding Info}" Value="">
<Setter TargetName="rect" Property="StrokeThickness" Value="1" />
<Setter TargetName="rect" Property="Stroke" Value="Black" />
<Setter TargetName="rect" Property="StrokeDashArray" Value="2 2" />
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ItemsControl.ItemTemplate>
您可以调整笔触画笔,粗细和破折号数组,直到它看起来正确。笔划虚线阵列被编码为一对对的序列:短划线的长度,后跟空间的长度。您可以包含任意数量的内容,但只需一对即可获得简单的虚线或点线模式。
请注意,您通常不应对颜色和画笔进行硬编码。对于Stroke
,我建议您使用{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}
或类似内容。
答案 1 :(得分:0)
您基本上需要Style.Triggers
<Style x:Key="RectangleStyle">
<Style.Triggers>
<DataTrigger Binding="{Binding Info}" Value="empty">
<Setter Property="Foreground" Value="Blue" />
</DataTrigger>
<DataTrigger Binding="{Binding Info}" Value="full">
<Setter Property="Foreground" Value="Red" />
</DataTrigger>
</Style.Triggers>
</Style>
使用以下样式触发器如下
<Rectangle Grid.Column="0" Height="25" Width="30" Style="{StaticResource RectangleStyle}"></Rectangle>
这将检查value
的{{1}}并相应地设置颜色。您可能需要更新一点,因为上面的代码未经过测试。希望这会有所帮助。