UWP - Как добавить цвета в коллекцию - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь наполнить свою коллекцию цветом.У меня есть элемент управления границей для отображения цвета, который выбран с помощью метода PrepareContainerForItemOverride, и у меня есть элемент управления кнопки для всплывающего цвета в коллекции.Вот мой код.

Picker.cs

public sealed class Picker : ItemsControl
{
    private ObservableCollection<SolidColorBrush> _myColors;
    public Picker()
    {
        this.DefaultStyleKey = typeof(Picker);
       _myColors = new ObservableCollection<SolidColorBrush>()
     {
        new SolidColorBrush(Color.FromArgb(255,225,225,25)),
        new SolidColorBrush(Color.FromArgb(255,225,25,25)),
        new SolidColorBrush(Color.FromArgb(255,225,225,225)),
        new SolidColorBrush(Color.FromArgb(255,25,225,25))
     };

    }

    public ObservableCollection<SolidColorBrush> MyColors
    {
        get
        {
            return (ObservableCollection<SolidColorBrush>)GetValue(MyColorsProperty);
        }
        set { SetValue(MyColorsProperty, value); }
    }

    public static readonly DependencyProperty MyColorsProperty =
        DependencyProperty.Register("MyColors",
     typeof(ObservableCollection<SolidColorBrush>), typeof(Picker), new
         PropertyMetadata(null));


    public Popup popup;
    protected override void OnApplyTemplate()
    {
        popup = GetTemplateChild("myPopup") as Popup;
        var popupbutton = GetTemplateChild("btn1") as Button;
        popupbutton.Click += Popupbutton_Click;
    }

    private void Popupbutton_Click(object sender, RoutedEventArgs e)
    {
        popup.IsOpen = popup.IsOpen ? false : true;
    }

    public bool openPopup
    {
        get { return (bool)GetValue(openPopupProperty); }
        set { SetValue(openPopupProperty, value); }
    }
    public static readonly DependencyProperty openPopupProperty =
        DependencyProperty.Register("openPopup", typeof(bool),
   typeof(Picker), new PropertyMetadata(true));


    public object Data { get; private set; }

    public event PropertyChangedEventHandler PropertyChanged;


    public void OnPropertyChanged(String propname)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propname));
        }
    }
}

Generic.xaml

<Style TargetType="local:Picker" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:Picker">
                <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <StackPanel>
                            <Border Height="50" BorderBrush="Blue" BorderThickness="5">
                                <Border.Background>
                                    <SolidColorBrush Color="{Binding Color}" />
                                </Border.Background>
                            </Border>
                            <Popup Name="myPopup" IsOpen="False" IsLightDismissEnabled="True">
                                <Grid Width="650" Height="300" Background="Red">
                                    <ItemsControl ItemsSource="{TemplateBinding MyColors}">
                                        <ItemsControl.ItemTemplate>
                                            <DataTemplate>
                                                <Grid>
                                                    <Border BorderThickness="6" BorderBrush="Black">
                                                        <Border.Background>
                                                            <SolidColorBrush Color="{Binding Color}" />
                                                        </Border.Background>
                                                    </Border>
                                                </Grid>
                                            </DataTemplate>
                                        </ItemsControl.ItemTemplate>
                                    </ItemsControl>
                                </Grid>
                            </Popup>
                        </StackPanel>
                        <Button Grid.Column="1" Name="btn1" Height="55" Content="Click me"/>
                    </Grid>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Здесь яЯ не могу открыть цвет в коллекции при нажатии кнопки, и мне нужно отобразить выбранный цвет в контроле границы с помощью метода PrepareContainerForItemOverride

1 Ответ

0 голосов
/ 01 июня 2018

Проблема в том, что вы связали неправильное свойство с ItemsSource.А приватное поле _myColors вы никогда не использовали.Я должен отредактировать ваш код.Это работает на моей стороне.

Picker.cs

 public Picker()
 {
     this.DefaultStyleKey = typeof(Picker);
     MyColors = new ObservableCollection<SolidColorBrush>()
  {
     new SolidColorBrush(Color.FromArgb(255,225,225,25)),
     new SolidColorBrush(Color.FromArgb(255,225,25,25)),
     new SolidColorBrush(Color.FromArgb(255,225,225,225)),
     new SolidColorBrush(Color.FromArgb(255,25,225,25))
  };

 }

 public ObservableCollection<SolidColorBrush> MyColors
 {
     get
     {
         return (ObservableCollection<SolidColorBrush>)GetValue(MyColorsProperty);
     }
     set { SetValue(MyColorsProperty, value); }
 }

 public static readonly DependencyProperty MyColorsProperty =
     DependencyProperty.Register("MyColors",
  typeof(ObservableCollection<SolidColorBrush>), typeof(Picker), new
      PropertyMetadata(null));

Generic.xaml

<Style TargetType="local:Picker" >
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="local:Picker">
                <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
                    <Grid>
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="*"/>
                            <ColumnDefinition Width="*"/>
                        </Grid.ColumnDefinitions>
                        <StackPanel>
                            <Border Height="50" BorderBrush="Blue" BorderThickness="5">
                                <Border.Background>
                                    <SolidColorBrush Color="{Binding Color}" />
                                </Border.Background>
                            </Border>
                            <Popup Name="myPopup" IsOpen="False" IsLightDismissEnabled="True">
                                <Grid Width="650" Height="300" >
                                    <ItemsControl ItemsSource="{TemplateBinding MyColors}">
                                        <ItemsControl.ItemTemplate>
                                            <DataTemplate>
                                                <Grid>
                                                    <Border BorderThickness="15" BorderBrush="{Binding}">
                                                    </Border>
                                                </Grid>
                                            </DataTemplate>
                                        </ItemsControl.ItemTemplate>
                                    </ItemsControl>
                                </Grid>
                            </Popup>
                        </StackPanel>
                        <Button Grid.Column="1" Name="btn1" Height="55" Content="Click me"/>
                    </Grid>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...