向Silverlight控件添加自定义属性

时间:2010-03-30 11:21:08

标签: .net silverlight xaml

将自己的属性添加到现有Silverlight控件的最佳方法是什么?例如,我想将自定义类与DataGrid关联,并能够在Expression Blend中设置此自定义类的属性吗?

这是一件容易的事吗?

谢谢,

AJ

2 个答案:

答案 0 :(得分:1)

通过继承,这很容易做到。

这是一个数据网格,它在输入击键时触发验证事件。

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:命名空间)并设置它的属性。

不知道混合,但它确实以相同的方式工作。

答案 1 :(得分:1)

另一种选择是使用附加的行为/属性。 它是继承/组合参数 - 扩展类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