【问题标题】:Color Palette Using GridView in UWP?在 UWP 中使用 GridView 的调色板?
【发布时间】:2020-04-03 04:01:16
【问题描述】:

我需要这样的调色板。我不知道怎么写代码。

【问题讨论】:

    标签: c# uwp uwp-xaml


    【解决方案1】:

    您可以创建一个包含 Color 属性的 ViewModel,然后获取要显示的颜色列表并将列表与 GridView 绑定,在每个 GridViewItem 中创建一个椭圆以显示不同的颜色。下面我以系统颜色列表为例。

    .xaml:

    <GridView x:Name="colorList2" Width="400" Height="600" Background="LightGray" ItemsSource="{x:Bind Colors,Mode=OneWay}">
        <GridView.ItemContainerStyle>
            <Style TargetType="GridViewItem">
                <Setter Property="Margin" Value="10"/>
            </Style>
        </GridView.ItemContainerStyle>
        <GridView.ItemsPanel>
            <ItemsPanelTemplate>
                <ItemsWrapGrid Orientation="Horizontal" MaximumRowsOrColumns="5"/>
            </ItemsPanelTemplate>
        </GridView.ItemsPanel>
        <GridView.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Ellipse Fill="{Binding Color}" Height="60" Width="60"/>
                </Grid>
            </DataTemplate>
        </GridView.ItemTemplate>
    </GridView>
    

    .cs:

    public class MyColor
    {
        public SolidColorBrush Color { get; set; }
    }
    
    public sealed partial class BlankPage1 : Page
    {
        public BlankPage1()
        {
            this.InitializeComponent();
            Colors = new ObservableCollection<MyColor>();
    
            foreach (var color in typeof(Colors).GetRuntimeProperties())
            {
                Colors.Add(new MyColor() { Color = new SolidColorBrush((Color)color.GetValue(null)) });
            }
        }
    
        public ObservableCollection<MyColor> Colors { get; set; }
    }
    

    更新:

    如果您想将点击项目的边框更改为黑色,您需要为您的 GridViewItem 更改覆盖 ItemContainerStyle。你可以去generic.xaml复制申请GridViewItem的GridViewItemExpanded样式。在 GridViewItemExpanded 样式中,有一个名为 BorderRectangle 的 Rectangle 代表边框,你只需要在不同的视觉状态下改变它的 Stroke 属性即可。

    用法:

    <GridView ItemContainerStyle="{StaticResource MyRoundItem2}">
    ......
    

    风格:

    <Page.Resources>
        <Style TargetType="GridViewItem" x:Key="MyRoundItem">
            ......
            <Setter Property="Margin" Value="10" />
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="GridViewItem">
                        <Grid x:Name="ContentBorder"
              Control.IsTemplateFocusTarget="True"
              FocusVisualMargin="{TemplateBinding FocusVisualMargin}"
              Background="{TemplateBinding Background}"
              BorderBrush="{TemplateBinding BorderBrush}"
              BorderThickness="{TemplateBinding BorderThickness}"
              CornerRadius="{TemplateBinding CornerRadius}"
              RenderTransformOrigin="0.5,0.5">
                            <Grid.RenderTransform>
                                <ScaleTransform x:Name="ContentBorderScale" />
                            </Grid.RenderTransform>
                            <VisualStateManager.VisualStateGroups>
                                <VisualStateGroup x:Name="FocusStates">
                                    <VisualState x:Name="Focused">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderRectangle" Storyboard.TargetProperty="Visibility">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Collapsed" />
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Unfocused" />
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="CommonStates">
                                    <VisualState x:Name="Normal">
                                        <Storyboard>
                                            <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="PointerOver">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="BorderRectangle"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderRectangle" Storyboard.TargetProperty="Stroke">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightListLowBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryBrush">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightListLowBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryThickness">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="2" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="Pressed">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="BorderRectangle"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderRectangle" Storyboard.TargetProperty="Stroke">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryBrush">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightListMediumBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryThickness">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="2" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <PointerDownThemeAnimation TargetName="ContentPresenter" />
                                        </Storyboard>
                                    </VisualState>
    
                                    <VisualState x:Name="Selected">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="MultiSelectCheck"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <DoubleAnimation Storyboard.TargetName="BorderRectangle"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderRectangle" Storyboard.TargetProperty="Stroke">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryBrush">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryThickness">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="2" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MultiSelectSquare" Storyboard.TargetProperty="Background">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="PointerOverSelected">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="MultiSelectCheck"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <DoubleAnimation Storyboard.TargetName="BorderRectangle"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderRectangle" Storyboard.TargetProperty="Stroke">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryBrush">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightListAccentMediumBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryThickness">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="2" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MultiSelectSquare" Storyboard.TargetProperty="Background">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <PointerUpThemeAnimation Storyboard.TargetName="ContentPresenter" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="PressedSelected">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="MultiSelectCheck"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <DoubleAnimation Storyboard.TargetName="BorderRectangle"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="BorderRectangle" Storyboard.TargetProperty="Stroke">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Black" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentPresenter" Storyboard.TargetProperty="Foreground">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlForegroundBaseHighBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryBrush">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightListAccentHighBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="ContentBorder" Storyboard.TargetProperty="FocusVisualSecondaryThickness">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="2" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MultiSelectSquare" Storyboard.TargetProperty="Background">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource SystemControlHighlightAccentBrush}" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <PointerDownThemeAnimation TargetName="ContentPresenter" />
                                        </Storyboard>
                                    </VisualState>
    
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="DisabledStates">
                                    <VisualState x:Name="Enabled" />
    
                                    <VisualState x:Name="Disabled">
    
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="ContentBorder"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="{ThemeResource ListViewItemDisabledThemeOpacity}" />
                                        </Storyboard>
                                    </VisualState>
    
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="MultiSelectStates">
                                    <VisualState x:Name="MultiSelectDisabled">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MultiSelectSquare" Storyboard.TargetProperty="Visibility">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                                <DiscreteObjectKeyFrame KeyTime="0:0:0.333" Value="Collapsed" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <FadeOutThemeAnimation TargetName="MultiSelectSquare" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="MultiSelectEnabled">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="MultiSelectSquare" Storyboard.TargetProperty="Visibility">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <FadeInThemeAnimation TargetName="MultiSelectSquare" />
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="DataVirtualizationStates">
                                    <VisualState x:Name="DataAvailable" />
                                    <VisualState x:Name="DataPlaceholder">
                                        <Storyboard>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderTextBlock" Storyboard.TargetProperty="Visibility">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                            </ObjectAnimationUsingKeyFrames>
                                            <ObjectAnimationUsingKeyFrames Storyboard.TargetName="PlaceholderRect" Storyboard.TargetProperty="Visibility">
                                                <DiscreteObjectKeyFrame KeyTime="0" Value="Visible" />
                                            </ObjectAnimationUsingKeyFrames>
                                        </Storyboard>
                                    </VisualState>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="ReorderHintStates">
                                    <VisualState x:Name="NoReorderHint" />
                                    <VisualState x:Name="BottomReorderHint">
                                        <Storyboard>
                                            <DragOverThemeAnimation TargetName="ContentBorder" ToOffset="{ThemeResource GridViewItemReorderHintThemeOffset}" Direction="Bottom" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="TopReorderHint">
                                        <Storyboard>
                                            <DragOverThemeAnimation TargetName="ContentBorder" ToOffset="{ThemeResource GridViewItemReorderHintThemeOffset}" Direction="Top" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="RightReorderHint">
                                        <Storyboard>
                                            <DragOverThemeAnimation TargetName="ContentBorder" ToOffset="{ThemeResource GridViewItemReorderHintThemeOffset}" Direction="Right" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="LeftReorderHint">
                                        <Storyboard>
                                            <DragOverThemeAnimation TargetName="ContentBorder" ToOffset="{ThemeResource GridViewItemReorderHintThemeOffset}" Direction="Left" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualStateGroup.Transitions>
                                        <VisualTransition To="NoReorderHint" GeneratedDuration="0:0:0.2" />
                                    </VisualStateGroup.Transitions>
                                </VisualStateGroup>
                                <VisualStateGroup x:Name="DragStates">
                                    <VisualState x:Name="NotDragging" />
                                    <VisualState x:Name="Dragging">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="ContentBorder"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="{ThemeResource ListViewItemDragThemeOpacity}" />
                                            <DragItemThemeAnimation TargetName="ContentBorder" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="DraggingTarget" />
                                    <VisualState x:Name="MultipleDraggingPrimary">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="MultiArrangeOverlayText"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <DoubleAnimation Storyboard.TargetName="MultiArrangeOverlayTextBorder"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <DoubleAnimation Storyboard.TargetName="MultiSelectSquare"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="0" />
                                            <DoubleAnimation Storyboard.TargetName="MultiSelectCheck"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="0" />
                                            <DoubleAnimation Storyboard.TargetName="ContentBorder"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="{ThemeResource ListViewItemDragThemeOpacity}" />
                                            <FadeInThemeAnimation TargetName="MultiArrangeOverlayText" />
                                            <FadeInThemeAnimation TargetName="MultiArrangeOverlayTextBorder" />
                                            <DragItemThemeAnimation TargetName="ContentBorder" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="MultipleDraggingSecondary" />
                                    <VisualState x:Name="DraggedPlaceholder" />
                                    <VisualState x:Name="Reordering">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="ContentBorder"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0:0:0.240"
                        To="{ThemeResource ListViewItemReorderThemeOpacity}" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="ReorderingTarget">
                                        <Storyboard>
                                            <DoubleAnimation Storyboard.TargetName="ContentBorder"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0:0:0.240"
                        To="{ThemeResource ListViewItemReorderTargetThemeOpacity}" />
                                            <DoubleAnimation Storyboard.TargetName="ContentBorderScale"
                        Storyboard.TargetProperty="ScaleX"
                        Duration="0:0:0.240"
                        To="{ThemeResource ListViewItemReorderTargetThemeScale}" />
                                            <DoubleAnimation Storyboard.TargetName="ContentBorderScale"
                        Storyboard.TargetProperty="ScaleY"
                        Duration="0:0:0.240"
                        To="{ThemeResource ListViewItemReorderTargetThemeScale}" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="MultipleReorderingPrimary">
                                        <Storyboard>
                                            <!-- These two Opacity animations are required - the FadeInThemeAnimations
                                             on the same elements animate an internal Opacity. -->
                                            <DoubleAnimation Storyboard.TargetName="MultiArrangeOverlayText"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <DoubleAnimation Storyboard.TargetName="MultiArrangeOverlayTextBorder"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="1" />
                                            <DoubleAnimation Storyboard.TargetName="MultiSelectSquare"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="0" />
                                            <DoubleAnimation Storyboard.TargetName="MultiSelectCheck"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0"
                        To="0" />
                                            <DoubleAnimation Storyboard.TargetName="ContentBorder"
                        Storyboard.TargetProperty="Opacity"
                        Duration="0:0:0.240"
                        To="{ThemeResource ListViewItemDragThemeOpacity}" />
                                            <FadeInThemeAnimation TargetName="MultiArrangeOverlayText" />
                                            <FadeInThemeAnimation TargetName="MultiArrangeOverlayTextBorder" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="ReorderedPlaceholder">
                                        <Storyboard>
                                            <FadeOutThemeAnimation TargetName="ContentBorder" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualState x:Name="DragOver">
                                        <Storyboard>
                                            <DropTargetItemThemeAnimation TargetName="ContentBorder" />
                                        </Storyboard>
                                    </VisualState>
                                    <VisualStateGroup.Transitions>
                                        <VisualTransition To="NotDragging" GeneratedDuration="0:0:0.2" />
                                    </VisualStateGroup.Transitions>
                                </VisualStateGroup>
                            </VisualStateManager.VisualStateGroups>
                            ......
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Page.Resources>
    

    【讨论】:

    • 它,工作正常..我需要,当我点击一个gridviewItem时,我想让点击项目的边框变黑,如果点击另一个项目,我想让前一个边框透明并且将当前选定的边框设为黑色.. 有吗???
    • 当一个item被点击时,我想获取那个item的DataTemplete,如何获取呢??
    • 为什么要拿到它的DataTemplete,要做什么?
    • 我想要数据模板中的元素...我想在运行时更改元素属性
    • 您可以创建一个与 UIElement 绑定的属性,然后只需在代码隐藏中更改该属性。关于这个,可以参考这个document实现绑定。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-26
    相关资源
    最近更新 更多