【问题标题】: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 上的蓝色边框

标签: c# xaml gridview windows-store-apps


【解决方案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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-10
      相关资源
      最近更新 更多