WPF наследование стиля
От: Аноним  
Дата: 06.08.11 09:35
Оценка:
Наследуемая кнопка теряет стили которые применяются к типу Button.
Как сделать чтобы новый тип MyButton наследовал стили ?

Вот пример как это выглядит
[URL=http://hostingkartinok.com/show-image.php?id=f64031462400570835d16ba897cc7f17]

Т.е. слева это стандартный Button на тулбаре, а справа MyButton наследник Button.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }
    }


    public class MyButton : Button
    {
    }
}


<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <ToolBarTray>
            <ToolBar>
                <Button>Тест</Button>
                <local:MyButton>Тест</local:MyButton>
            </ToolBar>
        </ToolBarTray>
    </Grid>
</Window>
Re: WPF наследование стиля
От: Vladek Россия Github
Дата: 06.08.11 12:24
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Наследуемая кнопка теряет стили которые применяются к типу Button.

А>Как сделать чтобы новый тип MyButton наследовал стили ?

Стили для кнопок и других контролов на тулбаре ищутся по ключам, которые определены самим тулбаром. Сделайте стиль для своей кнопки и унаследуйте его от стиля кнопки из тулбара, то есть напишите что-то вроде этого:

<Style TargetType="{x:Type my:MyButton}" BasedOn="{DynamicResource {x:Static ToolBar.ButtonStyleKey}}" />


И переопределите метаданные для DefaultStyleKeyProperty в классе MyButton, чтобы стиль для контрола искался по его типу, а не по типу Button.

static MyButton()
{
  FrameworkElement.DefaultStyleKeyProperty.
    OverrideMetadata(typeof(MyButton), new FrameworkPropertyMetadata(typeof(MyButton)));
}
Re: WPF наследование стиля
От: Gvozdin http://gvozdin.ru
Дата: 07.08.11 10:16
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Наследуемая кнопка теряет стили которые применяются к типу Button.

А>Как сделать чтобы новый тип MyButton наследовал стили ?

А>Вот пример как это выглядит

А>[URL=http://hostingkartinok.com/show-image.php?id=f64031462400570835d16ba897cc7f17]

А>Т.е. слева это стандартный Button на тулбаре, а справа MyButton наследник Button.


Стили для тулбара явно запрограммированы в самом тулбаре.
Выход вот такой может быть:
        public override void OnApplyTemplate()
        {
            if (!WPFHelper.IsInDesignMode && this.Parent.GetType() == typeof(ToolBar))
            {
                var style = this.FindResource(ToolBar.ButtonStyleKey) as Style;
                if (style != null)
                {
                    this.Style = style;
                }
            }
        }
http://gvozdin.ru
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.