wpf中的条件绑定?

时间:2018-01-11 18:09:08

标签: c# wpf xaml data-binding

我是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属性或其他)

如何在不影响其他项目的情况下绑定到特定项目?

2 个答案:

答案 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}}并相应地设置颜色。您可能需要更新一点,因为上面的代码未经过测试。希望这会有所帮助。