Haciendo que el botón de la barra estilo aplica a controles de usuario en la barra de herramientas

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

  •  09-09-2019
  •  | 
  •  

Pregunta

¿Cómo fuerzo UserControls en WPF que se encuentran dentro de una barra de herramientas para usar el estilo de botón predeterminado de la barra de herramientas?

Tengo un sencillo control de usuario llamado ImageButton XAML que tiene algo como esto:

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

Tengo algunas propiedades de dependencia en el código detrás de esas rutas de enlace y todo funciona bien.

Eso es hasta que lo puse en una barra de herramientas. Normalmente cuando se pone botones en una barra de herramientas que están remodelados por la barra de herramientas para parecerse botones de la barra. He descubierto cómo puedo cambiar este estilo (ver ToolBar.ButtonStyleKey . Pero, ¿cómo puedo aplicar el estilo ya definido a la propiedad de estilo de botón de mi dependencia de control de usuario?

¿Fue útil?

Solución

Oh, mis disculpas! Malinterpreté su pregunta. Dar a este un tiro:

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

El estilo sólo se refiere a los botones, por lo que sólo se puede aplicar a los botones. (Lo cual no será un problema por el aspecto de su comentario.)

Otros consejos

He encontrado una manera, que parece funcionar, aunque estoy interesado en otras formas de resolver esto.

He añadido un controlador de eventos cargado a mi control de usuario y poner esto en su interior.

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

Cuando el botón es el nombre del botón de control de usuario dentro de mi.

Se requeriría una poderosa magia negro con el fin de conseguir que se cree un nuevo estilo que funcione para su control de usuario automáticamente. Hay estilos incorporados para cada tipo de control integrado que puede añadir a la barra de herramientas. (Observe que ToolBar.ButtonStyleKey no está solo.) Tendrá que elaborar y aplicar su propio estilo que coincide con los elementos de la barra de herramientas estándar usted mismo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top