wpf listview控件在ItemTemplate 模板时隐藏Item失败

zaaserz 2020-02-19 04:28:26
我在软件中使用模板自定义了listviewitem的样式,其中根据上下文对某项进行了隐藏,但是在界面中依然能够选中隐藏的那项


代码如下
   <Style TargetType="ListView">
<!--重定义ListBox中项的样式-->
<Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<Border Width="80" Margin="3" BorderBrush="SteelBlue"
BorderThickness="1" CornerRadius="5"
Visibility="{Binding Converter={StaticResource DeviceVisibilityConverter}}"
HorizontalAlignment="Center" VerticalAlignment="Center"
Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}">
<TextBlock
HorizontalAlignment="Center" VerticalAlignment="Center"
Text="{Binding Converter={StaticResource DeviceIdConverter},StringFormat=Id:{0}}"/>
</Border>
</DataTemplate>
</Setter.Value>
</Setter>
<!--自定义选中项的颜色-->
<Setter Property="ItemContainerStyle">
<Setter.Value>
<Style TargetType="ListViewItem">
<Style.Triggers>
<Trigger Property="ListViewItem.IsSelected" Value="True">
<Setter Property="ListViewItem.Background" Value="Green"/>
</Trigger>
</Style.Triggers>
</Style>
</Setter.Value>
</Setter>
</Style>
...全文
191 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
groveer 2020-02-20
  • 打赏
  • 举报
回复
引用 3 楼 zaaserz 的回复:
[quote=引用 2 楼 groveer 的回复:] 转换器代码发一下看看 返回属性设置为Collapsed试试
返回属性就是Collapsed CommunicationModel是我内部定义的一个类,我断点试过,确实返回了Collapsed,感觉好像就是border被隐藏啦,但是listviewItem还是有
 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is CommunicationModel)
                return Visibility.Visible;
            else
            {
                return Visibility.Collapsed;
            }
        }
[/quote] 断点调试value值 看是否是value值传入的原因
zaaserz 2020-02-20
  • 打赏
  • 举报
回复
引用 2 楼 groveer 的回复:
转换器代码发一下看看 返回属性设置为Collapsed试试
返回属性就是Collapsed CommunicationModel是我内部定义的一个类,我断点试过,确实返回了Collapsed,感觉好像就是border被隐藏啦,但是listviewItem还是有
 public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            if (value is CommunicationModel)
                return Visibility.Visible;
            else
            {
                return Visibility.Collapsed;
            }
        }
zaaserz 2020-02-20
  • 打赏
  • 举报
回复
引用 4 楼 groveer 的回复:
断点调试value值 看是否是value值传入的原因
不是的,value值是正确的,这个按照了预期的流程,前几个返回的是Visible最后一个返回了Collapsed,应该不是这个问题,因为我强制把border 得visibility设置为Collapsed 然后所有子项都是这个情况,所以我怀疑是样式问题
 <Border Width="80" Margin="3" BorderBrush="SteelBlue"  
                                            BorderThickness="1" CornerRadius="5"  
                                            Visibility="Collapsed"
                                            HorizontalAlignment="Center" VerticalAlignment="Center" 
                                            Background="{Binding Path=Background, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type ListBoxItem}}}">
                                        <TextBlock 
                                                HorizontalAlignment="Center" VerticalAlignment="Center" 
                                                Text="{Binding Converter={StaticResource DeviceIdConverter},StringFormat=Id:{0}}"/>
                                    </Border> 
groveer 2020-02-19
  • 打赏
  • 举报
回复
转换器代码发一下看看 返回属性设置为Collapsed试试
zaaserz 2020-02-19
  • 打赏
  • 举报
回复
并且这个应该被隐藏的项还能被选中 我在border中使用Visibility="{Binding Converter={StaticResource DeviceVisibilityConverter}}"进行了隐藏,但感觉好像只是将模板进行了隐藏ListviewItem没有被隐藏

110,549

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧