我正在尝试改变所选项目的颜色,如maui教程中所述:https://learn.microsoft.com/en-us/dotnet/maui/user-interface/controls/collectionview/selection?view=net-maui-7.0
但它似乎并不工作正确。我的targettype是一个框架,我设置为属性:边框颜色为绿色色(正常时),边框颜色为浅蓝色(选中时)。但是,该选择完全被忽略,而是将默认的灰色条置于选择后面,如下所示:
我添加了我的代码:
<ContentPage.Resources>
<Style TargetType="Frame">
<Setter Property="VisualStateManager.VisualStateGroups">
<VisualStateGroupList>
<VisualStateGroup x:Name="CommonStates">
<VisualState x:Name="Normal" >
<VisualState.Setters>
<Setter Property="BorderColor"
Value="{StaticResource LighterGreen}" />
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Selected">
<VisualState.Setters>
<Setter Property="BorderColor"
Value="LightSkyBlue" />
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateGroupList>
</Setter>
</Style>
</ContentPage.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
<RowDefinition Height="250"/>
<RowDefinition Height="250"/>
</Grid.RowDefinitions>
<CollectionView SelectionMode="Multiple"
SelectionChanged="collectionview_coll_skills_SelectionChanged"
Margin="15,0,0,0"
Grid.Row="1"
VerticalScrollBarVisibility="Never" x:Name="collectionview_coll_skills">
<CollectionView.ItemsLayout>
<GridItemsLayout Orientation="Vertical" Span="3" />
</CollectionView.ItemsLayout>
<CollectionView.ItemTemplate>
<DataTemplate>
<ContentView>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="50"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="135"/>
</Grid.ColumnDefinitions>
<Frame Padding="8" Margin="0,0,0,5" BackgroundColor="Transparent">
<Label FontSize="14" VerticalOptions="Center" HorizontalOptions="Center" Text="{Binding DisplayValue}"/>
</Frame>
</Grid>
</ContentView>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
您可以看到边框的颜色是正确的,但它不受我选择或取消选择某个项目的影响。
我希望你能帮我
谢谢你,
J型
1条答案
按热度按时间31moq8wy1#
我在这里给予你一些建议。
1.为什么边框颜色不变?
因为每次点击CollectionView中的项目时,您可以只选择DataTemplate中定义的外部ContentView。这样框架边框颜色就不会更改,因为它不会接收状态更改。因此,作为替代方法,您可以将TargetType设置为ContentView。
2.如何设置背景色?
灰色背景色是项目被选中时的默认颜色。所以我认为最简单的避免方法是将ContentView的Backgroundcolor设置为白色。
3.下面是我的完整代码,运行良好:
注意:在CollectionView的DataTemplate中,记得将Frame的名称设置为“myframe”,就像我们在ContentPage.Resources中使用的那样。
有关详细信息,请参阅Visual states。
希望对你有用。