首页 > 解决方案 > UWP DataGrid 单元格中的 UWP ColorPickerButton 不会被选中

问题描述

我使用DataGridColorPickerButton从这里

xmlns:toolkit="using:Microsoft.Toolkit.Uwp.UI.Controls

当我点击它时,ColorPickerButton它保持打开状态并且没有颜色属性改变。

在此处输入图像描述

如何解决?谢谢!

XAML

 <toolkit:DataGrid    
                    x:Name="dataGridLayers"
                    Margin="0,0,0,0"
                    VerticalAlignment="Stretch" HorizontalAlignment="Stretch"
                    HorizontalScrollBarVisibility="Visible"
                    VerticalScrollBarVisibility="Visible"
                    AlternatingRowBackground="Transparent" 
                    AreRowDetailsFrozen="False"
                    AreRowGroupHeadersFrozen="True"
                    AutoGenerateColumns="False"
                    CanUserSortColumns="False"
                    CanUserReorderColumns="True"
                    RowGroupHeaderPropertyNameAlternative=""
                    CanUserResizeColumns="True"
                    ColumnHeaderHeight="32"
                    MaxColumnWidth="400"
                    FrozenColumnCount="0"
                    GridLinesVisibility="None"
                    HeadersVisibility="Column"
                    IsReadOnly="False" 
                    Height="400"
                    RowDetailsVisibilityMode="Collapsed"
                    SelectionMode="Single">
                                <toolkit:DataGrid.Columns>
                                    <toolkit:DataGridTextColumn Header="Name" Binding="{Binding LayerName}"  Tag="LayerName" IsReadOnly="True" />
                                    <toolkit:DataGridCheckBoxColumn IsThreeState="False"  Header="Включить в карту" Binding="{Binding LayerVisibility,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"  Tag="LayerVisibility"  />
                                    <toolkit:DataGridTextColumn Header="Stroke" Binding="{Binding LayerStroke, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"   Tag="LayerStroke" />
                                    <toolkit:DataGridTemplateColumn  Header="Color"  Tag="LayerColor">
                                        <toolkit:DataGridTemplateColumn.CellTemplate>
                                            <DataTemplate >
                                                <toolkit:ColorPickerButton SelectedColor="{Binding LayerColor, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
                                            </DataTemplate>
                                        </toolkit:DataGridTemplateColumn.CellTemplate>
                                    </toolkit:DataGridTemplateColumn>
                                </toolkit:DataGrid.Columns>
                            </toolkit:DataGrid>
                     

C#

 public abstract class EtherMapLayerBase : INotifyPropertyChanged
    {
        public Windows.UI.Color _layerColor { get; set; }
        public Windows.UI.Color LayerColor
        {
            get
            {
                return _layerColor;
            }

            set
            {
                if (_layerColor != value)
                {
                    _layerColor = value;
                    OnPropertyChanged();
                }
            }
        }


        public int _layerStroke { get; set; }
        public int LayerStroke
        {
            get
            {
                return _layerStroke;
            }

            set
            {
                if (_layerStroke != value)
                {
                    _layerStroke = value;
                    OnPropertyChanged();
                }
            }
        }


        public string _layerName { get; set; }
        public string LayerName
        {
            get
            {
                return _layerName;
            }

            set
            {
                if (_layerName != value)
                {
                    _layerName = value;
                    OnPropertyChanged();
                }
            }
        }


        public bool _layerVisibility { get; set; }
        public bool LayerVisibility
        {
            get
            {
                return _layerVisibility;
            }

            set
            {
                if (_layerVisibility != value)
                {
                    _layerVisibility = value;
                    OnPropertyChanged();
                }
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;

        protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        protected bool SetProperty<T>(ref T storage, T value, [CallerMemberName] String propertyName = null)
        {
            if (object.Equals(storage, value))
            {
                return false;
            }
            else
            {
                storage = value;
                OnPropertyChanged(propertyName);
                return true;
            }
        }
    }

    public class EtherMapLayerView : EtherMapLayerBase
    {
        public EtherMapLayerView()
        {
            LayerStroke = 1;
            LayerColor = Colors.Black; // using Windows.UI;
            LayerVisibility = true;
        }
    }

更新 #1 这似乎是一个错误......

因此,当您在第一个选项卡中选择颜色时,没有任何反应,但如果在其他选项卡上执行相同操作,则可以成功选择颜色。

标签: c#uwpdatagridcolor-picker

解决方案


当我单击 ColorPickerButton 时,它保持打开状态并且没有颜色属性更改。

问题是您将基色设置为Black LayerColor = Colors.Black,这将导致无法选择色轮。

请尝试将默认颜色设置为Transparent,它将按预期工作。

LayerColor = Colors.Transparent

推荐阅读