Работа с WPF Menu HeaderStringFormat и ключами доступа среди прочего
Хорошо. Поэтому я хочу, чтобы мое приложение отображало в главном меню элементы "Сохранить" и "Сохранить как..." так же, как это делает Visual Studio; т.е. "Сохранить {текущий файл}" и "Сохранить {текущий файл} как..."
Я также хотел бы иметь нормальные ключи доступа ("S" и "A", соответственно).
Я придумал два решения, но ни одно не очень желательно.
Вместо того, чтобы создавать главное меню исключительно в xaml, я мог бы создать все это в MainWindowViewModel, чтобы иметь полный контроль над тем, что входит в сгенерированные элементы MenuItem. Тем не менее, я чувствую, что это будет нарушением MVVM (который я сейчас очень строго соблюдаю), так как мне придется включать ссылки на Icon каждого MenuItem в ViewModel. Плюс это кажется немного грязным.
Я могу обозначить заголовок только для этих двух конкретных элементов MenuItem (и, возможно, будущих), но затем я получаю элемент MenuItem, который не только имеет подчеркивание в заголовке, но также не содержит ключа доступа.
<MenuItem Header="{Binding CurrentFileName}"
HeaderStringFormat="Save {0} _As...">
Что я должен делать?
1 ответ
Дракончик, разобрался. По крайней мере, о том, как сделать это с помощью всего главного меню, описанного в XAML. Просто сделал содержимое заголовка элементом управления AccessText вместо строки, и он работает как шарм.
<MenuItem>
<MenuItem.Style>
<Style TargetType="{x:Type MenuItem}">
<Style.Triggers>
<DataTrigger Binding="{Binding HasSelection}" Value="false">
<Setter Property="IsEnabled" Value="false"/>
<Setter Property="Header">
<Setter.Value>
<AccessText Text="Save Selected File _As..."/>
</Setter.Value>
</Setter>
</DataTrigger>
<DataTrigger Binding="{Binding HasSelection}" Value="true">
<Setter Property="IsEnabled" Value="true"/>
<Setter Property="Header">
<Setter.Value>
<AccessText Text="{Binding SelectedFile.Filename, StringFormat=Save {0} _As...}"/>
</Setter.Value>
</Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</MenuItem.Style>
</MenuItem>