Поле списка WPF разрабатывает с кнопкой

Попробуйте следующее:

func drawText(context: CGContextRef, text: NSString, attributes: [String: AnyObject], x: CGFloat, y: CGFloat) -> CGSize {
    let font = attributes[NSFontAttributeName] as UIFont
    let attributedString = NSAttributedString(string: text, attributes: attributes)

    let textSize = text.sizeWithAttributes(attributes)

    // y: Add font.descender (its a negative value) to align the text at the baseline
    let textPath    = CGPathCreateWithRect(CGRect(x: x, y: y + font.descender, width: ceil(textSize.width), height: ceil(textSize.height)), nil)
    let frameSetter = CTFramesetterCreateWithAttributedString(attributedString)
    let frame       = CTFramesetterCreateFrame(frameSetter, CFRange(location: 0, length: attributedString.length), textPath, nil)

    CTFrameDraw(frame, context)

    return textSize
    }

И назовите это:

var textAttributes: [String: AnyObject] = [
    NSForegroundColorAttributeName : UIColor(white: 1.0, alpha: 1.0).CGColor,
    NSFontAttributeName : UIFont.systemFontOfSize(17)
]

drawText(ctx, text: "Hello, World!", attributes: textAttributes, x: 50, y: 50)

Надеюсь, что это сработает!

7
задан ScottG 26 August 2008 в 13:54
поделиться

3 ответа

Смотрите на RoutedCommands.

Определите свою команду в myclass где-нибудь следующим образом:

    public static readonly RoutedCommand Login = new RoutedCommand();

Теперь определите свою кнопку с этой командой:

    <Button Command="{x:Static myclass.Login}"  />  

Можно использовать CommandParameter для получения дополнительной информации..

Теперь наконец, что не менее важно, начните слушать свою команду:

В конструкторе класса Вы хотите сделать некоторый хороший материал, Вы помещаете:

    CommandBindings.Add(new CommandBinding(myclass.Login, ExecuteLogin));

или в XAML:

   <UserControl.CommandBindings>
        <CommandBinding Command="{x:Static myclass.Login}" Executed="ExecuteLogin" />
   </UserControl.CommandBindings>

И Вы реализуете делегата потребности CommandBinding:

    private void ExecuteLogin(object sender, ExecutedRoutedEventArgs e)
    {
          //Your code goes here... e has your parameter!
    }

Можно начать слушать эту команду везде в визуальном дереве!

Надеюсь, это поможет

PS можно также определить CommandBinding с делегатом CanExecute, который даже отключит команду, если CanExecute заявит так :)

PPS Здесь является другим примером: RoutedCommands в WPF

10
ответ дан 6 December 2019 в 12:56
поделиться

Как отправленный Арктур, RoutedCommands являются отличным способом достигнуть этого. Однако, если существует только одна кнопка в Вашем DataTemplate затем, это могло бы быть немного более просто:

Можно на самом деле обработать событие Click любой кнопки от хоста ListBox, как это:

<ListBox Button.Click="removeButtonClick" ... />

Любые кнопки, содержавшие в ListBox, запустят то событие, когда на них нажмут. Из обработчика событий можно использовать e. OriginalSource для возвращения ссылки на кнопку, на которую нажали.

Очевидно, это слишком упрощенно, если Ваши ListBoxItems имеют больше чем одну кнопку, но во многих случаях она работает просто великолепно.

6
ответ дан 6 December 2019 в 12:56
поделиться

Вы могли создать пользовательский элемент управления (.ascx) для корпуса поля списка. Затем добавьте общественное мероприятие для страницы.

Public Event btnRemove()

Затем на событии нажатия кнопки в usercontrol

RaiseEvent btnRemove()

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

0
ответ дан 6 December 2019 в 12:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: