Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Listview 如何在xamarin.UWP中的Viewcell项目选择上设置自己的颜色?_Listview_Xamarin_Xamarin.forms_Uwp_Xamarin.uwp - Fatal编程技术网

Listview 如何在xamarin.UWP中的Viewcell项目选择上设置自己的颜色?

Listview 如何在xamarin.UWP中的Viewcell项目选择上设置自己的颜色?,listview,xamarin,xamarin.forms,uwp,xamarin.uwp,Listview,Xamarin,Xamarin.forms,Uwp,Xamarin.uwp,我创建的应用程序包含列表视图,当我尝试运行到iOS和Android时,它可以与自定义渲染器正常工作,但当我尝试在Windows中运行时,点击它显示蓝色,我必须在项目点击时设置Transparent颜色,我尝试创建自定义渲染器,但我找不到解决方案 提前感谢。对于uwp,您只需将样式添加到uwp项目中的app.xaml文件中即可。只需将以下样式添加到app.xaml uwp端的ResourceDictionary中 <Application.Resources> <Resourc

我创建的应用程序包含列表视图,当我尝试运行到
iOS
Android
时,它可以与自定义渲染器正常工作,但当我尝试在Windows中运行时,点击它显示蓝色,我必须在项目点击时设置Transparent颜色,我尝试创建自定义渲染器,但我找不到解决方案


提前感谢。

对于uwp,您只需将样式添加到uwp项目中的app.xaml文件中即可。只需将以下样式添加到app.xaml uwp端的ResourceDictionary中

<Application.Resources>
 <ResourceDictionary>
  <ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Light">
       <Color x:Key="SystemAccentColor">#FF0000</Color>
       <SolidColorBrush x:Key="SystemControlHighlightAltListAccentHighBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.9" />
       <SolidColorBrush x:Key="SystemControlHighlightAltListAccentLowBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.6" />
       <SolidColorBrush x:Key="SystemControlHighlightAltListAccentMediumBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.8" />
       <SolidColorBrush x:Key="SystemControlHighlightListAccentHighBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.9" />
       <SolidColorBrush x:Key="SystemControlHighlightListAccentLowBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.6" />
       <SolidColorBrush x:Key="SystemControlHighlightListAccentMediumBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.8" />
    </ResourceDictionary>
  </ResourceDictionary.ThemeDictionaries>
 </ResourceDictionary>
</Application.Resources>

#FF0000

对于uwp,只需将样式添加到uwp项目中的app.xaml文件中即可。只需将以下样式添加到app.xaml uwp端的ResourceDictionary中

<Application.Resources>
 <ResourceDictionary>
  <ResourceDictionary.ThemeDictionaries>
    <ResourceDictionary x:Key="Light">
       <Color x:Key="SystemAccentColor">#FF0000</Color>
       <SolidColorBrush x:Key="SystemControlHighlightAltListAccentHighBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.9" />
       <SolidColorBrush x:Key="SystemControlHighlightAltListAccentLowBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.6" />
       <SolidColorBrush x:Key="SystemControlHighlightAltListAccentMediumBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.8" />
       <SolidColorBrush x:Key="SystemControlHighlightListAccentHighBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.9" />
       <SolidColorBrush x:Key="SystemControlHighlightListAccentLowBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.6" />
       <SolidColorBrush x:Key="SystemControlHighlightListAccentMediumBrush" Color="{ThemeResource SystemAccentColor}" Opacity="0.8" />
    </ResourceDictionary>
  </ResourceDictionary.ThemeDictionaries>
 </ResourceDictionary>
</Application.Resources>

#FF0000

在这种情况下,您有两种选择。如果不需要
ListView
来指示所选项目,只需知道已点击的项目,请将
SelectionMode
设置为
None


要知道已点击了哪个项目,现在可以使用
itemtapted
事件,该事件将为您提供
itemtapedeventargs.item
属性中的数据绑定项目

如果要保持选择模式,但要修改所选
列表视图
项的颜色,也可以这样做

检查文档中
列表视图
控件的默认样式和模板。您可以看到,默认情况下,颜色设置在
列表视图项目演示器中。SelectedBackground
{ThemeResource SystemControlHighlightListAccentLowBrush}
。此笔刷实际上是基于当前用户的系统强调色的系统范围内的笔刷,但您可以覆盖-仅针对特定的
ListView
或整个应用程序

如果需要应用程序范围的覆盖,请在UWP项目头内的
App.xaml
中的应用程序资源级别上声明一个
Brush


对于特定于控件的替代,请创建自定义渲染器和自定义样式

首先,共享项目中的控制:

公共类选择ColorListView:ListView
{
公共静态只读BindableProperty SelectionColorProperty=
创建(nameof(SelectionColor)、typeof(Color)、typeof(SelectionColorListView)、Color.Green);
公共颜色选择颜色
{
get=>(颜色)GetValue(SelectionColorProperty);
set=>SetValue(SelectionColorProperty,value);
}
}
然后是UWP的渲染器:

[程序集:导出渲染器(typeof(SelectionColorListView)、typeof(SelectionColorListViewRenderer))]
名称空间App.UWP
{
公共类SelectionColorListViewRenderer:ListViewRenderer
{
受保护的覆盖无效OnElementChanged(ElementChangedEventArgs e)
{
基础。一个要素发生变化(e);
if(例如NewElement!=null)
{
updateSelectColor();
}
}
受保护的覆盖无效OnElementPropertyChanged(对象发送方,PropertyChangedEventArgs e)
{
base.OnElementPropertyChanged(发送方,e);
if(e.PropertyName==nameof(SelectionColorListView.SelectionColor))
{
updateSelectColor();
}
}
私有void updateSelectColor()
{
if(Control!=null&&Element为SelectionColorListView listView)
{
var nativeColor=XamarinColorToNative(listView.SelectionColor);
Control.Resources[“SystemControlHighlightListAccentLowBrush”]=新的SolidColorBrush(nativeColor);
}
}
专用颜色Xamarin颜色调节剂(Xamarin.Forms.Color)
{
var alpha=(字节)(color.A*255);
var red=(字节)(color.R*255);
绿色变量=(字节)(color.G*255);
蓝色变量=(字节)(color.B*255);
返回颜色。来自argb(alpha、红色、绿色、蓝色);
}
}
}
请注意,不幸的是,无法在运行时更改颜色-一旦第一次完成选择,即使更改属性值,颜色也将保持不变


最后,如果您只想让颜色“透明”,请使用
color.transparent
作为
SelectionColor

在这种情况下,您有两个选项。如果不需要
ListView
来指示所选项目,只需知道已点击的项目,请将
SelectionMode
设置为
None


要知道已点击了哪个项目,现在可以使用
itemtapted
事件,该事件将为您提供
itemtapedeventargs.item
属性中的数据绑定项目

如果要保持选择模式,但要修改所选
列表视图
项的颜色,也可以这样做

检查文档中
列表视图
控件的默认样式和模板。您可以看到,默认情况下,颜色设置在
列表视图项目演示器中。SelectedBackground
{ThemeResource SystemControlHighlightListAccentLowBrush}
。此笔刷实际上是基于当前用户的系统强调色的系统范围内的笔刷,但您可以覆盖-仅针对特定的
ListView
或整个应用程序

如果需要应用程序范围的覆盖,请在UWP项目头内的
App.xaml
中的应用程序资源级别上声明一个
Brush


对于特定于控件的替代,请创建自定义渲染器和自定义样式

首先,共享项目中的控制:

公共类选择ColorListView:ListView
{
公共静态只读BindableProperty SelectionColorProperty=
绑定