Заставить стиль кнопки панели инструментов применить к элементам управления пользователя на панели инструментов - PullRequest
6 голосов
/ 04 июня 2009

Как заставить UserControls в WPF, которые находятся внутри панели инструментов, использовать стиль кнопок панели инструментов по умолчанию?

У меня есть простой пользовательский элемент управления под названием ImageButton, который имеет XAML примерно так:

<UserControl x:Class="myNameSpace.ImageButtonUserControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    x:Name="imageButton"
    >
    <Button Style="{Binding ElementName=imageButton, Path=ButtonStyle}">
        <StackPanel Orientation="Horizontal">
            <Image Source="{Binding ElementName=imageButton, Path=ImageSource}"
                   VerticalAlignment="Center" 
                   />
            <TextBlock Text="{Binding ElementName=imageButton, Path=Text}" 
                       Style="{Binding ElementName=imageButton, Path=TextStyle}"
                       VerticalAlignment="Center"
                       />
        </StackPanel>
    </Button>
</UserControl>

У меня есть некоторые свойства зависимостей в коде для этих путей привязки, и все работает отлично.

Пока я не положу его в панель инструментов. Обычно, когда вы помещаете кнопки в панель инструментов, они изменяют стиль панели инструментов, чтобы они выглядели как кнопки панели инструментов. Я узнал, как я могу изменить этот стиль (см. ToolBar.ButtonStyleKey . Но как я могу применить уже определенный стиль к свойству зависимости стиля кнопок моего пользовательского элемента управления?

Ответы [ 3 ]

20 голосов
/ 04 июня 2009

О, мои извинения! Я неверно истолковал ваш вопрос. Дайте этому шанс:

<Button Style="{StaticResource {x:Static ToolBar.ButtonStyleKey}}">
    Hello, world!
</Button>

Стиль предназначен только для кнопок, поэтому его можно применять только к кнопкам. (Что не будет проблемой, если смотреть на ваш комментарий.)

4 голосов
/ 04 июня 2009

Я нашел способ, который, кажется, работает, хотя меня интересуют другие способы решения этой проблемы.

Я добавил загруженный обработчик событий в свой UserControl и поместил его в него.

if (button.Style == null && this.Parent is ToolBar)
{
    button.Style = (Style)FindResource(ToolBar.ButtonStyleKey);
}

Где кнопка - это имя кнопки внутри моего UserControl.

0 голосов
/ 04 июня 2009

Вам потребуется немного мощной черной магии, чтобы заставить ее автоматически создавать новый функционирующий стиль для вашего пользовательского контроля. Для каждого типа встроенного элемента управления есть встроенные стили, которые вы можете добавить на панель инструментов. (Обратите внимание, что ToolBar.ButtonStyleKey не одинок.) Вам нужно будет разработать и применить свой собственный стиль, который соответствует стандартным элементам панели инструментов.

...