C# wpf中的条件绑定?
我是WPF的新手,我正在制作一个包含矩形和信息的图例。 这是圣诞礼物C# wpf中的条件绑定?,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我是WPF的新手,我正在制作一个包含矩形和信息的图例。 这是圣诞礼物 <ItemsControl Name="icColorInfo" ItemsSource="{Binding m_legendInfo}" BorderBrush="DarkBlue" BorderThickness="2"> <ItemsControl.ItemTemplate> <DataTempl
<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>
矩形填充绑定到my legend类的color属性,并
textblock绑定到info属性
现在我想做的是,如果图例“Info”条目等于“Empty”,我希望矩形有一个虚线边框(可能设置笔划属性或其他)
如何在不影响其他项目的情况下绑定到特定项目?您基本上需要
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>
这将检查
info
的value
,并相应地设置颜色。您可能需要更新一点,因为上面的代码未测试。希望这会有所帮助。您基本上需要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>
这将检查
info
的value
,并相应地设置颜色。您可能需要更新一点,因为上面的代码未测试。希望这会有所帮助。在ItemTemplate
中,一个简单的DataTrigger
可以为您做到这一点:
<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>
您可以调整笔划笔刷、厚度和虚线阵列,直到它看起来合适为止。笔划破折号数组编码为一组对:破折号的长度后跟空格的长度。您可以包含任意数量的内容,但对于简单的虚线或虚线图案,只需一对即可
请注意,通常不应硬编码颜色和笔刷。对于
笔划
,我建议您使用{DynamicResource{x:Static SystemColors.WindowTextBrushKey}}
或类似的工具。在项目模板
中使用一个简单的数据触发器
可以为您做到:
<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}}
或类似的工具。谢谢Mike,我正试图这样做,但我不知道怎么做。这还是个新鲜事。你提供的解决方案适合我的需要。谢谢你,我能帮上忙:)。仅供参考,如果您对堆栈溢出问题的答案感到满意,通常会将其标记为已接受(如果您愿意,请向上投票),这样响应者将获得声誉点数。一些吹毛求疵:如果Info
等于“Empty”
,而不是空字符串”
,则问题要求更改边界。。。虽然这也可能是真正的意思。谢谢迈克,我正试着做那样的事,但我不知道怎么做。这还是个新鲜事。你提供的解决方案适合我的需要。谢谢你,我能帮上忙:)。仅供参考,如果您对堆栈溢出问题的答案感到满意,通常会将其标记为已接受(如果您愿意,请向上投票),这样响应者将获得声誉点数。一些吹毛求疵:如果Info
等于“Empty”
,而不是空字符串”
,则问题要求更改边界。。。虽然这也可能是真正的意思。