Наследуемая кнопка теряет стили которые применяются к типу 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>
Здравствуйте, Аноним, Вы писали:
А>Наследуемая кнопка теряет стили которые применяются к типу 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)));
}
Здравствуйте, Аноним, Вы писали:
А>Наследуемая кнопка теряет стили которые применяются к типу 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;
}
}
}