文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>Silverlight4 ColorPicker控件

Silverlight4 ColorPicker控件

时间:2011-05-16  来源:超时空饭盒

原来在用一个第三方的ColorPicker控件,结果发现会导致内存泄漏。

又找了找开源的那些,没有很满意的,得,自己组装一个吧。

基本上是参考以下2篇文章组装的:

http://dotnetslackers.com/articles/silverlight/Color-Picker-Control-In-Silverlight-4.aspx

http://www.codeproject.com/KB/silverlight/Silverlight_ColorPicker.aspx

那些关键算法是在第2篇文章里的。站在巨人的肩膀上干起活来就轻便多了。

改改样式,修复下已知的Bug,调整下分块逻辑,组装。

当然还有最原始的目的,防止内存泄漏,比如:

 <Popup x:Name="Popup" IsOpen="{TemplateBinding IsOpen}"
Margin
="0,0,0,0" VerticalAlignment="Bottom">
<!--sadly,binding dp or set element in popup's child will cause memory leak-->
<!--http://blogs.telerik.com/blogs/posts/10-09-27/silverlight_4_memory_leaks_telerik_controls_and_a_solution.aspx-->
<!--<Canvas>
<StackPanel Orientation="Horizontal">
-->
<!--<local:PaletteColorPickerPart SelectedColor="{Binding SelectedColor,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"/>
<local:BoardColorPickerPart SelectedColor="{Binding SelectedColor,Mode=TwoWay,RelativeSource={RelativeSource TemplatedParent}}"/>
-->
<!--<local:PaletteColorPickerPart x:Name="PaletteColorPickerPart"/>
<local:BoardColorPickerPart x:Name="BoardColorPickerPart"/>
</StackPanel>
</Canvas>
-->
</Popup>

本来可以很方便的样式里绑定下,没想到Popup会有内存泄漏问题,只能后台代码。

另外还有个用于绑定选中颜色的类:

View Code
    public class PaletteColorItem : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public event EventHandler Selected;

SolidColorBrush _brush;
bool _isSelected;

public SolidColorBrush Brush
{
get { return _brush; }
set
{
_brush
= value;
this.OnPropertyChanged("Brush");
}
}

public bool IsSelected
{
get { return _isSelected; }
set
{
_isSelected
= value;
if (_isSelected)
{
this.OnSelected();
}
this.OnPropertyChanged("IsSelected");
}
}

private void OnPropertyChanged(string propertyName)
{
var handle
= PropertyChanged;
if (handle != null)
{
handle.Invoke(
this, new PropertyChangedEventArgs(propertyName));
}
}

private void OnSelected()
{
var handle
= Selected;
if (handle != null)
{
handle.Invoke(
this, new EventArgs());
}
}
}

原来“public SolidColorBrush Brush"是直接用Color绑定的,工作良好。后来装了SL5,发现不工作了。也不知道是不是这个原因,没有仔细研究过,就先放着吧。

当然,还存在一些问题,比如选择的颜色没有变化时,下拉框不会关闭。没有最新使用的颜色这一区域。等等等。

大家笔下留情。

看看效果:杯具,不会搞。。。。。

  还有源码: code
相关阅读 更多 +
排行榜 更多 +
找茬脑洞的世界安卓版

找茬脑洞的世界安卓版

休闲益智 下载
滑板英雄跑酷2手游

滑板英雄跑酷2手游

休闲益智 下载
披萨对对看下载

披萨对对看下载

休闲益智 下载