【问题标题】:Adding custom properties to Silverlight controls向 Silverlight 控件添加自定义属性
【发布时间】:2010-03-30 11:21:08
【问题描述】:

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

这是一件容易的事吗?

谢谢,

AJ

【问题讨论】:

    标签: .net silverlight xaml


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

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

    【讨论】:

    • 你好,你真的这样做了吗?我的印象是子类 Silverlight 控件无法在运行时初始化。
    • 是的,我已经这样做了,而且很多次。你想要一个活生生的例子吗?
    • 成功了,非常感谢。但是,如果您进行 Google 搜索,则会提到各种问题。早期版本的 SL 没有这个能力吗?
    • 确实,处理 Silverlight 3 很痛苦,因为您进行的每次搜索都会返回有关 SL2 beta 或 SL1 中的错误或缺失功能的结果......
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2011-03-12
      • 2012-04-13
      • 2018-05-29
      • 2011-04-16
      • 2013-07-25
      • 1970-01-01
      • 2011-11-28
      • 2015-03-09
      • 2018-08-06
      相关资源
      最近更新 更多