【问题标题】:Extending WPF Button to store data in a new property扩展 WPF 按钮以将数据存储在新属性中
【发布时间】:2009-02-19 15:01:47
【问题描述】:

我想扩展一个 WPF 按钮来存储一些额外的数据,类似于当前的“标签”属性。附加属性是前进的方向吗?我要存储的数据将是一个 URL 链接字符串,例如我希望能够执行以下操作:

<Button Tag="BBC World News" URLLink="http://www.bbc.co.uk"/>

谁能帮我理解如何扩展 Button?

非常感谢

【问题讨论】:

    标签: wpf button


    【解决方案1】:

    您可以使用attached property

    public class ButtonBehavior
    {
         public static readonly DependencyProperty UrlLinkProperty =
                DependencyProperty.RegisterAttached("UrlLink",
                                                    typeof(ButtonBase),
                                                    typeof(ButtonBehavior),
                                                    new FrameworkPropertyMetadata(null));
    
         public static string GetUrlLink(DependencyObject d)
         {
              return (string)d.GetValue(UrlLinkProperty);
         }
    
         public static void SetUrlLink(DependencyObject d, string value)
         {
              d.SetValue(UrlLinkProperty, value);
         }
    }
    

    然后你可以像这样声明你的按钮:

    <Button Tag="BBC World News" ButtonBehavior.UrlLink="http://www.bbc.co.uk" Click="btnArticleView"/>
    

    而你的点击处理程序将如下所示:

     protected void btnArticleView(object sender, RoutedEventArgs e)
     {
    
         Button rb = sender as Button;
         string TheTitle = rb.Tag.ToString();
         string TheURL = ButtonBehavior.GetUrlLink(rb);
    
         //  Further code here
    
     }
    

    【讨论】:

      【解决方案2】:

      像这样定义附加属性

       public static readonly DependencyProperty UrlLinkProperty =
              DependencyProperty.RegisterAttached("UrlLink",
                                                  typeof(String),
                                                  typeof(ButtonBehavior)
                                                  new FrameworkPropertyMetadata(null));
      

      【讨论】:

        【解决方案3】:

        我不确定您的目标。您不需要扩展 Button 来存储两个值。您始终可以使用包含这两个值的自定义数据对象设置 Button 的 Datacontext。你能解释更多关于你的问题。

        【讨论】:

          【解决方案4】:

          感谢您的回复。

          我有一个包含复杂自定义数据模板的列表框。该模板包含一个按钮。当我单击按钮时,我想发送 2 个字符串,即“URL 链接”和“URL 标题”。所以我在我的列表框数据模板中绑定了许多值,我想在按钮单击事件中传递其中两个。代码示例:

           protected void btnArticleView(object sender, RoutedEventArgs e)
              {
          
               Button rb = sender as Button;
               string TheTitle = rb.Tag.ToString();
               string TheURL = rb.URLLink.ToString();
          
               //  Further code here
          
          }
          

          和 XAML:

          <Button Tag="BBC World News" URLLink="http://www.bbc.co.uk" Click="btnArticleView"/>
          

          干杯

          【讨论】:

            【解决方案5】:

            我知道这是一篇旧帖子,但是...

            您始终可以使用 2 个属性“URLText”和“URLTitle”创建自定义类“MyURL”,然后创建该对象“objURL”并设置值并设置 button.datacontext = objURL。 然后在单击事件中区分 rb 和 obj 以及您的文本变量 obj = rb.datacontext theTitle = obj.urltitle theURL = obj.urltext

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多