WPF Ribbon Control - Изменить содержимое кнопки ленты - PullRequest
1 голос
/ 07 апреля 2010

Есть ли способ изменить содержимое RibbonButton?

Я знаю, что в RibbonButton есть изображение и метка, но мне нужна кнопка с формой (класс Rectangle) в ее содержимом, и для этой кнопки должен быть применен стиль RibbonButton. Есть ли способ сделать это?

1 Ответ

1 голос
/ 20 мая 2010

Почему бы вам не создать собственный элемент управления кнопками?

XAML:

<Button x:Class="MyApp.myButton"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="71" d:DesignWidth="87">
    <Rectangle Height="40" Width="40" Fill="#FFC11414" />

Код позади:

public partial class myButton : Button, IRibbonControl
{

    public myButton()
    {
        InitializeComponent();
        Type forType = typeof(myButton);
        FrameworkElement.DefaultStyleKeyProperty.OverrideMetadata(forType, new FrameworkPropertyMetadata(forType));
        ButtonBase.CommandProperty.OverrideMetadata(forType, new FrameworkPropertyMetadata(new PropertyChangedCallback(OnCommandChanged)));
        FrameworkElement.ToolTipProperty.OverrideMetadata(forType, new FrameworkPropertyMetadata(null, new CoerceValueCallback(RibbonButton.CoerceToolTip)));
        ToolTipService.ShowOnDisabledProperty.OverrideMetadata(forType, new FrameworkPropertyMetadata(true));
    }
    public static object CoerceToolTip(DependencyObject d, object value)
    {
        if (value == null)
        {
            RibbonButton button = (RibbonButton)d;
            RibbonCommand command = button.Command as RibbonCommand;
            if ((command == null) || ((string.IsNullOrEmpty(command.ToolTipTitle) && string.IsNullOrEmpty(command.ToolTipDescription)) && (command.ToolTipImageSource == null)))
            {
                return value;
            }
            value = new RibbonToolTip(command);
        }
        return value;
    }
    private static void OnCommandChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        ((myButton)d).CoerceValue(FrameworkElement.ToolTipProperty);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...