禁用网格视图中的项目,存储应用程序

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 从 提取到 UserControl。在 PointerEvents 上的这个 UserControl 挂钩中,如 PointerEntered、PointerExited 等,并实现控件的可视化,例如PointerEntered 上的蓝色边框 【参考方案1】:

您可以尝试使用 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>

【讨论】:

以上是关于禁用网格视图中的项目,存储应用程序的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Xcode 中的不同视图控制器禁用工具栏项目 [重复]

无法在我的颤振演示应用程序中的列表视图中显示网格视图

颤振中的自定义高度网格视图

如何禁用网格中的元素

如何在 Flex 4 的可编辑数据网格中禁用自动排序

无法在网格视图中显示存储中的 Json 数据(使用 Sencha 框架)