我想把ListViewItem
写在UWP里,这会改变他对选择的看法,所以我需要改变ListViewItem
的一些元素的Visibility
属性。
我找到了一些方法来实现这一点,方法是为ListViewItem
创建自定义样式并绑定IsSelected
属性,如下所示:
<Style x:Key="VehicleListViewItemStyle" TargetType="ListViewItem" >
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ListViewItem">
<Grid Background="Gray" Margin="1">
<Border Margin="2" Padding="10" Background="Gray" >
<StackPanel>
<ContentPresenter x:Name="Presenter1" />
<StackPanel Orientation="Horizontal" Background="Transparent" Margin="-10,0,-9,-9" VerticalAlignment="Center" x:Name="infoPanel"
Visibility="{Binding IsSelected, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}">
<TextBlock Text="{Binding DeviceID}/> </StackPanel>
</StackPanel>
</Border>
<Border BorderThickness="1" BorderBrush="Orange" Visibility="{Binding IsSelected, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}"/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
它的工作很好,但与这种方式,我不能绑定的DeviceID
文本。
另一种方法是创建DataTemplate
,如下所示:
<DataTemplate x:Key="monitoringListViewItem" x:Name="item">
<Grid Background="Gray" Margin="1" Width="300" >
<StackPanel>
<ContentPresenter x:Name="Presenter"/>
<StackPanel Orientation="Horizontal">
<Image Source="/Assets/14th_crane_stop.png" Height="50" Width="50" Stretch="Uniform"/>
<StackPanel Orientation="Vertical" Margin="25,0,0,0 "
Visibility="{Binding IsSelected, RelativeSource={RelativeSource Mode=TemplatedParent}, Converter={StaticResource BooleanToVisibilityConverter}}"
>
<TextBlock Text="{Binding DeviceID}" Style="{StaticResource VehicleTextStyle}"/>
<TextBlock Text="{Binding Mark}" Style="{StaticResource VehicleTextStyle}"/>
</StackPanel>
</StackPanel>
</StackPanel >
</Grid>
</DataTemplate>
现在我可以正确绑定文本,但是不能绑定IsSelected
属性。我已经尝试过用不同的模式来绑定,但是仍然不起作用,因为我不能在DataTemplate中使用TemplatedParent
键。
所以我需要一些答案:
- 我可以用第一种方式绑定文本吗?我该怎么做?-我该怎么用第二种方式绑定
IsSelected
属性?
3条答案
按热度按时间fdx2calv1#
我不建议更改ListViewItem模板,因为您会失去它提供的所有功能(选择外观、检查能力等)。
在第二个代码段中使用
Mode=TemplatedParent
将不起作用,因为该上下文中的模板化父项是ListViewItemPresenter,而不是ListViewItem(表示者的父项)。看起来您尝试做的是在选中列表项时在其中显示附加信息。
单选
多重选择
与单一选取相同,但有以下变更:
voase2hg2#
若要回答主题中的实际问题:是的,您可以很容易地绑定ListViewItem.IsSelected。请确保您的DataTemplate内容 Package 在ListViewItem中。
请注意,这里有许多关于WPF的问答都说这不起作用。它可以与UWP一起工作(至少在SDK 10.0.19041中)。WPF的回答建议将它绑定到ItemsPanelTemplate或ResourceDictionary中。由于某种原因,这在UWP中不起作用。
bjp0bcyl3#
我执行了以下操作,效果很好