Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# wpf中的条件绑定?_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 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

我是WPF的新手,我正在制作一个包含矩形和信息的图例。

这是圣诞礼物

        <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”
,而不是空字符串
,则问题要求更改边界。。。虽然这也可能是真正的意思。