WPF使用Popup与ItemsControl实现取色器

XAML:

<Popup Name="popColorPicker"
	   Width="315"
	   Height="296"
	   AllowsTransparency="False"
	   IsOpen="{Binding IsColorPickerOpen}"
	   Placement="Mouse"
	   PopupAnimation="Fade"
	   StaysOpen="True">
	<Border BorderThickness="0"
			CornerRadius="4">
		<ScrollViewer HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">
			<ItemsControl Margin="10" ItemsSource="{Binding Items}">
				<ItemsControl.ItemsPanel>
					<ItemsPanelTemplate>
						<WrapPanel />
					</ItemsPanelTemplate>
				</ItemsControl.ItemsPanel>
				<ItemsControl.ItemTemplate>
					<DataTemplate>
						<Border x:Name="ColorBorder"
								Width="24"
								Height="24"
								Margin="8"
								Background="{Binding Brush}"
								BorderThickness="0"
								CornerRadius="2"
								Cursor="Hand"
								Tag="{Binding}">
							<i:Interaction.Triggers>
								<i:EventTrigger EventName="MouseLeftButtonDown">
									<i:InvokeCommandAction Command="{Binding Path=DataContext.ColorPickedCommand, ElementName=Main}" CommandParameter="{Binding Tag, ElementName=ColorBorder}" />
								</i:EventTrigger>
							</i:Interaction.Triggers>
						</Border>
					</DataTemplate>
				</ItemsControl.ItemTemplate>
			</ItemsControl>
		</ScrollViewer>
	</Border>
</Popup>

VM:


public List<BrushInfo> Items { get; private set; }

private void IniColors()
{
	var brushes = typeof(Brushes).GetProperties(BindingFlags.Static | BindingFlags.Public);

	var query =
		from propertyInfo in brushes
		let brush = propertyInfo.GetValue(null, null) as SolidColorBrush
		//where brush != null
		orderby brush.Color.G
		select new BrushInfo(propertyInfo.Name, brush);

	Items = query.ToList();
}

private async Task OnColorPicked(object arg)
{
	//todo:
    //...
	IsColorPickerOpen = false;
}


public class BrushInfo
{
	private readonly SolidColorBrush brush;

	public BrushInfo(string name, SolidColorBrush brush)
	{
		this.brush = brush;
		Name = name;
	}

	public Brush Brush => brush;

	public string Name { get; }

	public string Hex => brush.Color.ToString();
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值