我在收藏夹视图中制作相框,我想在每次选择相框时更改相框的背景颜色,但问题是我无法从收藏夹视图访问相框,而当我单击相框时,它将选择默认的相框橙色。
我在框架模型类中做了一些小的更改,在其中我想更改标签的文本颜色,就像我们在这里所做的那样,框架的颜色是代码,但无法正常工作 该代码在框架模型类中
public Color LabelColor
{
set
{
if (txtcolor != value)
{
txtcolor = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("labelcolor"));
}
}
}
get
{
return firstFrameBackColor;
}
}
在这里,我可以在CS课中访问
FrameModel previous = (e.PreviousSelection.FirstOrDefault() as FrameModel);
FrameModel current = (e.CurrentSelection.FirstOrDefault() as FrameModel);
//Set the current to the color you want
try
{
current.FirstFrameBackColor = Color.FromRgb(74, 152, 247);
current.LabelColor = Color.White;
// current.SecondFrameBackColor = Color.Green;
}
catch (Exception ex)
{
ex.Message.ToString();
throw;
}
// current.SecondFrameBackColor = Color.Green;
if (previous != null)
{
//Reset the previous to defaulr color
previous.FirstFrameBackColor = Color.White;
current.LabelColor = Color.Black;
//previous.SecondFrameBackColor = Color.Purple;
}
答案 0 :(得分:0)
橙色实际上是您的状态中state_activated的值 Android应用的主题。所以并不是每个人都会看到橙色。那只是 AppCompat默认。如果没有其他原因,这是后备值 指定。
在CollectionView中选择一个项目时,VisualState为 项目的根Forms元素更改为Selected。您可以使用 VisualStateManager来管理所选项目的外观。对于 一个例子,看看控件中的SelectionModeGallery 画廊。在该页面上,所选项目的背景色是 设置为LightSkyBlue。也可以设置任何其他Forms属性。 例如,尝试添加到 标签。
目前,这是有限的。你真的只能修改 您的ItemTemplate中的根元素。
因此,由于您的Frame不是ItemTemplate中的Root元素,因此无法回答您的问题。您可以在StackLAyout或SelectedItem中应用它,然后手动更改元素的背景颜色。
答案 1 :(得分:0)
当我将x:name属性提供给集合中的子视图时 查看我无法在我的C#类中访问它们
您无法从名称后面的代码访问模板中的项目,因为在运行时可能会创建0或1000个该模板的副本。
请参阅以下讨论:cannot-reach-control-x-name-inside-listview
在这种情况下,您可以将背景属性 binding 设置为模型中的属性,而不是访问模板中的控件,例如:
<Frame
WidthRequest="20"
HeightRequest="20"
Margin="0,-30,0,10"
HorizontalOptions="End"
CornerRadius="10"
Padding="5"
BackgroundColor="{Binding SecondFrameBackColor}">
<Label
Text="5"
TextColor="#FFFFFF"
HorizontalTextAlignment="Center"
VerticalTextAlignment="Center"
>
</Label>
</Frame>
这是模型:
class myModel : INotifyPropertyChanged
{
Color firstFrameBackColor;
Color secondFrameBackColor;
public event PropertyChangedEventHandler PropertyChanged;
public myModel()
{
}
public Color FirstFrameBackColor
{
set
{
if (firstFrameBackColor != value)
{
firstFrameBackColor = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("FirstFrameBackColor"));
}
}
}
get
{
return firstFrameBackColor;
}
}
public Color SecondFrameBackColor
{
set
{
if (secondFrameBackColor != value)
{
secondFrameBackColor = value;
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs("SecondFrameBackColor"));
}
}
}
get
{
return secondFrameBackColor;
}
}
}
项目资料:
public partial class MainPage : ContentPage
{
ObservableCollection<myModel> models = new ObservableCollection<myModel>();
public MainPage()
{
InitializeComponent();
myModel model1 = new myModel() { FirstFrameBackColor = Color.White, SecondFrameBackColor = Color.Purple };
myModel model2 = new myModel() { FirstFrameBackColor = Color.White, SecondFrameBackColor = Color.Purple };
myModel model3 = new myModel() { FirstFrameBackColor = Color.White, SecondFrameBackColor = Color.Purple };
myModel model4 = new myModel() { FirstFrameBackColor = Color.White, SecondFrameBackColor = Color.Purple };
myModel model5 = new myModel() { FirstFrameBackColor = Color.White, SecondFrameBackColor = Color.Purple };
myModel model6 = new myModel() { FirstFrameBackColor = Color.White, SecondFrameBackColor = Color.Purple };
myModel model7 = new myModel() { FirstFrameBackColor = Color.White, SecondFrameBackColor = Color.Purple };
models.Add(model1);
models.Add(model2);
models.Add(model3);
models.Add(model4);
models.Add(model5);
models.Add(model6);
models.Add(model7);
CNlist.ItemsSource = models;
}
然后在SelectionChanged
事件中,将背景更改为所需的背景:
private void CNlist_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
myModel previous = (e.PreviousSelection.FirstOrDefault() as myModel) ;
myModel current = (e.CurrentSelection.FirstOrDefault() as myModel);
//Set the current to the color you want
current.FirstFrameBackColor = Color.Pink;
current.SecondFrameBackColor = Color.Green;
if (previous != null)
{
//Reset the previous to defaulr color
previous.FirstFrameBackColor = Color.White;
previous.SecondFrameBackColor = Color.Purple;
}
}
这是结果:
我更新了示例here,您可以检查它。让我知道它是否对您有用!