禁用网格视图中的项目,存储应用程序
Posted
技术标签:
【中文标题】禁用网格视图中的项目,存储应用程序【英文标题】:Disable An item in a gridview, store app 【发布时间】:2015-05-30 04:32:39 【问题描述】:我在商店应用中有一个网格视图,它动态绑定到集合
<GridView x:Name="Gridview1" Height="180" HorizontalAlignment="Left" VerticalAlignment="Top"
ScrollViewer.HorizontalScrollMode="Disabled" SelectionMode="None" >
<GridView.ItemTemplate>
<DataTemplate >
<Border Background="White" BorderBrush="LightGray" BorderThickness="3" Height="150" Width="150" Tapped="peopleDashboard_Tapped" PointerEntered="Gridview1_PointerEntered" PointerExited="Gridview1_PointerExited" >
<Grid Margin="5" >
<TextBlock Text="Binding TileName" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Top"
TextWrapping="Wrap" TextAlignment="Center"></TextBlock>
<TextBlock Text="Binding TileValue" Foreground="Orange" FontSize="18" VerticalAlignment="Bottom" HorizontalAlignment="Center"
TextWrapping="Wrap" TextAlignment="Center"></TextBlock>
</Grid>
</Border>
</DataTemplate>
</GridView.ItemTemplate>
</GridView>
我正在像这样在代码中绑定这个 gridview
Gridview1.ItemsSource = listObj;
我会得到 7 盒。 on hover gridview 每个项目都有一个悬停边框颜色。
我只需要禁用 gridview 中的一个特定项目。
我可以写Gridview1.IsEnabled = false
来禁用整个gridview。
但我只需要禁用特定项目。
这是填充的网格视图的图片
这是禁用的网格视图。
我只需要禁用 gridview 中的一个框。 有什么可能的建议吗?
【问题讨论】:
您可以将布尔属性“IsEnabled”添加到您的 listObj,然后使用数据绑定将其绑定到网格的 isEnabled 属性(而不是整个 gridview) 你有什么尝试吗? 那行不通。数据绑定到整个gridview。它不会设置“IsEnabled”。 DataTemplate 中的项目是没有“IsEnabled”属性的边框和网格。 我尝试了另一种方法,通过使用指针输入和指针退出事件,将指针光标设置为红色不可点击的通用编号 Window.Current.CoreWindow.PointerCursor = new Windows.UI.Core。 CoreCursor(Windows.UI.Core.CoreCursorType.UniversalNo, 1);但这并不是我真正想要的。 为什么使用 Window.Current.CoreWindow.PointerCursor ... 只需将 DataTemplate 从您可以尝试使用 IValue 转换器。如果 Value 为“InProgress”,则在绑定数据时将其禁用,我认为您想要这样的东西。尝试谷歌搜索如何使用 IValue 转换器。
【讨论】:
【参考方案2】:多年后......我自己在尝试在我的 UWP 项目中制作一些非活动项目时偶然发现了这个问题。我的解决方案是使用扩展的 DataTemplateSelector,它允许启用/禁用基于 gridview 项目在关联的类对象的属性上,如下所述:
https://www.jerriepelser.com/blog/disable-item-selection-winrt-gridview/
<Page.Resouces>
<DataTemplate x:Name "ActiveItem" >
<Border Background="White" BorderBrush="LightGray" BorderThickness="3" Height="150" Width="150" Tapped="peopleDashboard_Tapped" PointerEntered="Gridview1_PointerEntered" PointerExited="Gridview1_PointerExited" >
<Grid Margin="5" >
<TextBlock Text="Binding TileName" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Top"
TextWrapping="Wrap" TextAlignment="Center"></TextBlock>
<TextBlock Text="Binding TileValue" Foreground="Orange" FontSize="18" VerticalAlignment="Bottom" HorizontalAlignment="Center"
TextWrapping="Wrap" TextAlignment="Center"></TextBlock>
</Grid>
</Border>
</DataTemplate>
<DataTemplate x:Name "InactiveItem" >
<Border Background="White" BorderBrush="LightGray" BorderThickness="3" Height="150" Width="150" Tapped="peopleDashboard_Tapped" PointerEntered="Gridview1_PointerEntered" PointerExited="Gridview1_PointerExited" >
<Grid Margin="5" >
<TextBlock Text="Binding TileName" FontSize="18" HorizontalAlignment="Center" VerticalAlignment="Top"
TextWrapping="Wrap" TextAlignment="Center"></TextBlock>
<TextBlock Text="Binding TileValue" Foreground="Orange" FontSize="18" VerticalAlignment="Bottom" HorizontalAlignment="Center"
TextWrapping="Wrap" TextAlignment="Center"></TextBlock>
</Grid>
</Border>
</DataTemplate>
<local:SelectionItemTemplateSelector x:Key="DataTemplateSelector" ActiveItemDataTemplate="StaticResource ActiveItem" InactiveItemTemplate="StaticResource InactiveItem"/>
</Page.Resources>
<GridView x:Name="Gridview1" Height="180" HorizontalAlignment="Left" VerticalAlignment="Top"
ScrollViewer.HorizontalScrollMode="Disabled" SelectionMode="None" ItemTemplateSelector="StaticResource DataTemplateSelector" >
</GridView>
【讨论】:
以上是关于禁用网格视图中的项目,存储应用程序的主要内容,如果未能解决你的问题,请参考以下文章