wpf中的条件绑定?

mit*_*mit 1 c# data-binding wpf xaml

我对 WPF 真的很陌生,我正在制作一个包含矩形和信息的图例。 这是传奇的一个例子

这是 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>
Run Code Online (Sandbox Code Playgroud)

矩形填充绑定到我的图例类的颜色属性,文本块绑定到信息属性

现在我想要做的是,如果图例“信息”条目等于“空”,我希望矩形有一个虚线边框(也许设置 Stroke 属性或其他东西)

如何绑定到特定项目而不影响其他项目?

Mik*_*bel 6

一个简单DataTriggerItemTemplate可以为你做到这一点:

<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>
Run Code Online (Sandbox Code Playgroud)

您可以调整笔触画笔、粗细和虚线阵列,直到它看起来适合您。笔划破折号数组被编码为一对序列:破折号的长度后跟空格的长度。您可以随心所欲地包含任意数量,但对于简单的虚线或点线图案,您只需要一对即可。

请注意,您通常不应硬编码颜色和画笔。对于Stroke,我建议您使用{DynamicResource {x:Static SystemColors.WindowTextBrushKey}}或类似的东西。