Fazendo o botão da barra Estilo aplica a controles de usuário na barra de ferramentas

StackOverflow https://stackoverflow.com/questions/947293

  •  09-09-2019
  •  | 
  •  

Pergunta

Como faço para forçar UserControls em WPF que estão dentro de uma barra de ferramentas para usar o estilo padrão do botão da barra de ferramentas?

Eu tenho um controle de usuário simples chamado ImageButton que tem XAML algo como isto:

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

Eu tenho algumas propriedades de dependência no código por trás para esses caminhos de ligação e tudo funciona bem.

Isso é até que eu colocá-lo em uma barra de ferramentas. Normalmente, ao colocar botões em uma barra de ferramentas que estão reestilizado pela barra de ferramentas para olhar como botões da barra de ferramentas. Eu descobri como posso mudar este estilo (veja ToolBar.ButtonStyleKey . Mas como eu posso aplicar o estilo já definido para o meu usuário propriedade estilo do botão dependência do controle?

Foi útil?

Solução

Ooh, as minhas desculpas! Eu mal interpretada a sua pergunta. Dar a este um tiro:

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

O estilo tem como alvo apenas botões, por isso só pode ser aplicada aos botões. (O que não será um problema pelo olhar de seu comentário.)

Outras dicas

Eu encontrei uma maneira, que parece funcionar, embora eu estou interessado em outras formas de resolver isso.

Eu adicionei um manipulador de eventos carregado ao meu UserControl e colocar isso dentro dela.

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

Onde botão é o nome do botão dentro do meu UserControl.

Você iria exigir alguma magia negra poderosa, a fim de obtê-lo para criar um novo estilo de funcionamento para o seu usercontrol automaticamente. Há built-in estilos para cada tipo de built-in de controle que você pode adicionar à barra de ferramentas. (Note que ToolBar.ButtonStyleKey não está sozinho.) Você precisará de artesanato e aplicar seu próprio estilo que combina com os elementos da barra de ferramentas padrão si mesmo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top