Расширение кнопки WPF для хранения данных в новом свойстве - PullRequest
4 голосов
/ 19 февраля 2009

Я хочу расширить кнопку WPF для хранения некоторых дополнительных данных, аналогично текущему свойству «Tag». Прилагаемые свойства - это путь вперед? Данные, которые я хочу сохранить, будут строкой URL-ссылки, например, я хотел бы иметь возможность сделать что-то вроде:

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

Может ли кто-нибудь помочь мне понять, как расширить кнопку?

Большое спасибо

Jay

Ответы [ 5 ]

7 голосов
/ 20 февраля 2009

Вы можете использовать прикрепленное свойство :

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

 }
1 голос
/ 03 марта 2009

Определите прикрепленное свойство следующим образом

 public static readonly DependencyProperty UrlLinkProperty =
        DependencyProperty.RegisterAttached("UrlLink",
                                            typeof(String),
                                            typeof(ButtonBehavior)
                                            new FrameworkPropertyMetadata(null));
0 голосов
/ 06 апреля 2010

Я знаю, что это старый пост, но ...

Вы всегда можете создать пользовательский класс "MyURL" с 2 свойствами "URLText" и "URLTitle", затем создать этот объект "objURL", установить значения и установить button.datacontext = objURL. Затем в событии click задайте значения rb и obj и ваши текстовые переменные obj = rb.datacontext theTitle = obj.urltitle theURL = obj.urltext

0 голосов
/ 19 февраля 2009

Спасибо за ваш ответ.

У меня есть список со сложным настраиваемым шаблоном данных. Шаблон содержит кнопку. Когда я нажимаю кнопку, я хочу отправить 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"/>

Приветствия

Jay

0 голосов
/ 19 февраля 2009

Я не уверен в вашей цели здесь. Вам не нужно расширять кнопку для хранения двух значений. Вы всегда можете установить Datacontext для кнопки с пользовательским объектом данных, который содержит эти два значения. Можете ли вы объяснить больше по вашей проблеме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...