C# 使特定的ListView项目在通用Windows平台中不可单击
我正在XAML中使用C# 使特定的ListView项目在通用Windows平台中不可单击,c#,xaml,win-universal-app,microsoft-metro,uwp,C#,Xaml,Win Universal App,Microsoft Metro,Uwp,我正在XAML中使用ListView元素: <ListView x:Name="myList" IsItemClickEnabled="true" ItemClick="onDrawerItemClick" SelectionMode="Single" ScrollViewer.VerticalScr
ListView
元素:
<ListView
x:Name="myList"
IsItemClickEnabled="true"
ItemClick="onDrawerItemClick"
SelectionMode="Single"
ScrollViewer.VerticalScrollBarVisibility="Hidden">
<ListView.ItemTemplate>
<DataTemplate>
<Grid
Width="260">
<Grid.ColumnDefinitions>
<ColumnDefinition
Width="44" />
<ColumnDefinition
Width="*" />
</Grid.ColumnDefinitions>
<Image
x:Name="image"
Source="{Binding myIcon}"
Grid.Column="0" />
<TextBlock
Text="{Binding myTxt}"
Grid.Column="1" />
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
我使用Bind属性填充它,如下所示:
List<MyObj> listData = a list with title + image uri;
myList.ItemsSource = listData;
List listData=具有标题+图像uri的列表;
myList.ItemsSource=listData;
我需要根据列表中
MyObj
中的某个值禁用某些项目的单击,但其他项目需要禁用。在Android系统中,我们使用适配器来实现这一点,我应该如何处理它呢?listView是一个奇怪的控件,因为它没有任何机制来禁用选择
因此,我建议您做的是通过将事件处理程序附加到ItemSelectionChanged并在其中对项目执行取消选择来处理通知框架已选择项目的事件:
yourListView.ItemSelectionChanged += yourListView_ItemSelectionChanged;
private void yourListView_ItemSelectionChanged(
object sender,
ListViewItemSelectionChangedEventArgs e)
{
if (e.IsSelected)
e.Item.Selected = false;
}
如果我的回答有帮助,请告诉我:)首先,您应该在
MyObj
对象内创建一个名为Disabled
的新bool
属性
然后,订阅myList
的ContainerContentChangeing
事件,您可以在该事件中访问ListViewItem
及其相应的项目
,在本例中,它就是您的MyObj
。因此,如果MyObj.Disabled
为true
,则使该ListViewItem
不可单击
private void myList_ContainerContentChanging(ListViewBase sender, ContainerContentChangingEventArgs args)
{
var listViewItem = args.ItemContainer;
if (listViewItem != null)
{
var model = (MyObj)args.Item;
if (model.Disabled)
{
listViewItem.IsHitTestVisible = false;
// OR
//listViewItem.IsEnabled = false;
}
}
}
请记住,如果希望该项显示为灰色,则可能需要使用listViewItem.IsEnabled=false
。这是因为默认的ListViewItem
样式具有禁用状态,该状态会降低其不透明度
;设置listViewItem.IshittesVisible=false时,不会以任何方式更改其外观。请参阅此链接