Я пытаюсь создать повторно используемый стиль навигации Пользовательский элемент управления в WPF, как панель навигации на веб-сайте. Он будет содержать ссылки на все основные страницы моего приложения. Этот элемент управления может идти поверх всех моих страниц в моем NavigationWindow. Придание красивого согласованного внешнего вида страницам, например веб-сайту.
Моя проблема заключается в том, чтобы оформить ссылку на текущую страницу иначе, чем ссылки на других страницах, чтобы вы могли быстро взглянуть на нее и увидеть, на какой странице вы находитесь. Поскольку элемент управления на каждой странице одинаков, мне нужно сообщить ему, какая страница является «активной», и назначить ей соответствующий стиль.
Моей первой мыслью было просто поместить Is 1007 * Активные свойства в элемент управления, по одному для каждой страницы, а затем установить для свойства соответствующее значение true на странице. (Или я мог бы использовать одно свойство, которое принимает значение Enum вместо множества свойств, в любом случае)
Пример:
<local:Header IsHomePageActive="True" />
Теперь в шаблоне элемента управления для моего пользовательского элемента управления заголовка я могу создать DataTrigger, который следит за этим свойством:
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource FindAncestor, AncestorType={x:Type local:Header}}, Path=IsHomePageActive}" Value="true">
<Setter ... />
<Setter ... />
<Setter ... />
</DataTrigger>
</Style>
После всего этого фона вот мой вопрос. Это работает, но мне нужно будет продублировать этот DataTrigger и все сеттеры в нем для каждой страницы, которую я имею, потому что триггер должен напрямую ссылаться на свойство IsHomePageActive, которое применяется только к одной ссылке. Поэтому мне нужен свой стиль для каждой ссылки, даже если фактический стиль, который он описывает, абсолютно одинаков (то есть, я имею в виду, что сеттеры одинаковы). Разница лишь в том, какое свойство отслеживает триггер.
Есть ли какой-нибудь способ сделать это (или что-то с тем же конечным результатом), не заканчивая сотнями строк дублированного XAML?