Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Making the ToolBar Button Style apply to UserControls in the Toolbar

How do I force UserControls in WPF that are inside a ToolBar to use the ToolBar's default button style?

I have a simple user control called ImageButton which has XAML something like this:

<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>

I have some dependency properties in the code behind for those binding paths and everything works fine.

That is until I put it in a ToolBar. Normally when you put buttons in a ToolBar they are restyled by the ToolBar to look like toolbar buttons. I've found out how I can change this style (see ToolBar.ButtonStyleKey. But how can I apply the already defined style to my User Control's Button Style dependency property?

like image 347
Ray Avatar asked Jun 03 '09 21:06

Ray


2 Answers

Ooh, my apologies! I misinterpreted your question. Give this a shot:

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

The style only targets buttons, so it can only be applied to buttons. (Which won't be a problem by the look of your comment.)

like image 159
YotaXP Avatar answered Sep 20 '22 16:09

YotaXP


I found a way, that seems to work, although I'm interested in other ways of solving this.

I added a loaded event handler to my UserControl and put this inside it.

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

Where button is the name of the button inside my UserControl.

like image 28
Ray Avatar answered Sep 19 '22 16:09

Ray