Pregunta

Estoy intentando crear un reutilizables estilo de navegación Control Personalizado en WPF, como una barra de navegación en un sitio web.Contendrá enlaces a todas las Páginas principales en mi aplicación.Este control puede ir en la parte superior de todas mis Páginas en mi NavigationWindow.Da una buena apariencia consistente a través de las páginas, como una página web.

Mi problema es en el estilo de la página actual del enlace de forma diferente al resto de las páginas de enlaces, así que puedes echar un vistazo y ver qué página estás.Puesto que el control es el mismo en cada Página, tengo que decir que la página es "activo" y tiene el estilo que enlace de forma adecuada.

Mi primer pensamiento fue, simplemente, el lugar Es<Page>Propiedades activas en el control, uno para cada página y, a continuación, establezca la propiedad adecuada para cierto en la página.(O podría utilizar una propiedad que acepta un valor de Enumeración en lugar de tener muchas propiedades, de cualquier manera)

Ejemplo:

<local:Header IsHomePageActive="True" />

Ahora en la plantilla de control de mi Cabecera de Control Personalizado, puede crear un DataTrigger que los relojes de esta propiedad:

<Style.Triggers>
  <DataTrigger Binding="{Binding RelativeSource FindAncestor, AncestorType={x:Type local:Header}}, Path=IsHomePageActive}" Value="true">
    <Setter ... />
    <Setter ... />
    <Setter ... />
  </DataTrigger>
</Style>

Después de todo lo que de fondo, aquí está mi pregunta. Esto funciona, pero voy a tener que duplicar ese DataTrigger, y todas las Incubadoras en el mismo, para cada una de las páginas que tengo, porque el Gatillo tiene que hacer referencia directa a la "IsHomePageActive" de la propiedad, que sólo se aplica para el enlace.Así que tengo un Estilo diferente para cada enlace, a pesar de que el ESTILO de su describiendo es exactamente el mismo (por lo que me refiero, las Incubadoras son los mismos).La única diferencia es lo que la propiedad del gatillo está viendo.

Hay alguna manera de hacer esto (o algo con el mismo resultado final) sin tener que acabar con cientos de líneas de duplicados XAML?

¿Fue útil?

Solución

Cómo sobre el uso de un maestro/detalle patrón () con un cuadro de lista(por ejemplo) como el maestro y sus páginas web en los detalles.

A continuación, especifique el estilo para el elemento seleccionado en la lista.

La página cambiará cuando una lista diferente elemento está seleccionado y se ven diferentes a los demás elementos.

si usted tiene una propiedad de dependencia, como la Lista de Páginas en la Página hereda de UserControl y tiene una cadena de Título puede utilizar

        <ListBox
                 ItemsSource="{Binding Pages}"
                 IsSynchronizedWithCurrentItem="true">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Title}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

        <ScrollViewer VerticalScrollBarVisibility="Auto"
                      Content="{Binding Pages/}" />

A continuación, acaba de establecer un estilo para el elemento seleccionado en el listbox

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