【发布时间】:2010-03-30 11:21:08
【问题描述】:
将我自己的属性添加到现有 Silverlight 控件的最佳方式是什么?例如,我想将自定义类与 DataGrid 相关联,并能够在 Expression Blend 中设置此自定义类的属性?
这是一件容易的事吗?
谢谢,
AJ
【问题讨论】:
标签: .net silverlight xaml
将我自己的属性添加到现有 Silverlight 控件的最佳方式是什么?例如,我想将自定义类与 DataGrid 相关联,并能够在 Expression Blend 中设置此自定义类的属性?
这是一件容易的事吗?
谢谢,
AJ
【问题讨论】:
标签: .net silverlight xaml
通过继承,很容易做到。
这里有一个数据网格,它在输入击键时触发验证事件。
namespace SLCommon
{
public delegate void VaditateSelectionEventHandler(object sender, EventArgs e);
/// <summary>
/// Fires a validate event whenever the enter key or the left mouse button is pressed
/// </summary>
public class EventDatagrid : DataGrid
{
public event VaditateSelectionEventHandler Validate;
public EventDatagrid()
: base()
{
this.MouseLeftButtonUp += new MouseButtonEventHandler(OnMouseLeftButtonUp);
}
protected override void OnKeyDown(KeyEventArgs e)
{
if (e.Key != Key.Enter)
base.OnKeyDown(e);
else
{
e.Handled = true;
Validate(this, e);
}
}
protected void OnMouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
Validate(this, e);
}
}
}
XAML 端:
<slc:EventDatagrid x:Name="toto" Validate="toto_Validate"
AutoGenerateColumns="True" IsReadOnly="True" Width="auto" MaxHeight="300">
</slc:EventDatagrid>
注意 Validate 事件处理程序。
在这里,您可以在 xaml 文件中添加一个控件 myobj(请务必在页面顶部声明正确的 xmlns: 命名空间)并设置它的属性。
不知道混合,但它确实以相同的方式工作。
【讨论】:
另一种选择是使用附加的行为/属性。 这是继承/组合参数 - 要扩展类 X 的功能,是从类 X 继承并扩展它,还是创建包含类 X 的类 Y?
这是一个通过附加行为将 PixelSnapping 添加到 SL 的示例: http://blogs.msdn.com/devdave/archive/2008/06/22/Using-an-Attached-DependencyProperty-to-Implement-Pixel-Snapping-as-an-Attached-Behavior.aspx
【讨论】: