Я хочу использовать NavigationView в качестве навигации по вкладкам для моего приложения UWP, поскольку оно имеет соответствующий стиль и хорошо справляется с переполнением.
Теперь я хочу добавить кнопку к каждому NavigationViewItem справа от метки. Эта кнопка должна быть видна только при выборе элемента.
Мне удалось добавить кнопку в приведенный ниже код, но я не могу понять, как скрыть кнопку, когда вкладка не выбрана. Я попытался привязать кнопку к bool в моей модели данных, которую я установил на true на ItemInvoked, но это не сработало.
<NavigationView x:Name = "NavView"
PaneDisplayMode = "Top"
OverflowLabelMode = "NoLabel"
IsSettingsVisible = "False"
IsBackButtonVisible = "Collapsed"
MenuItemsSource = "{x:Bind TabItems}">
<NavigationView.MenuItemTemplate>
<DataTemplate x:DataType = "models:TabNavigationItem">
<StackPanel Orientation = "Horizontal">
<TextBlock Text = "{x:Bind Text}" VerticalAlignment = "Center"></TextBlock>
<Viewbox Width = "16" Height = "16" VerticalAlignment = "Center" Margin = "2,0,0,0">
<Button Background = "{StaticResource Transparent}" VerticalAlignment = "Center">
<FontIcon FontFamily = "Segoe MDL2 Assets" Glyph = ""></FontIcon>
</Button>
</Viewbox>
</StackPanel>
</DataTemplate>
</NavigationView.MenuItemTemplate>
</NavigationView>
Я посмотрел на Community Toolkit TabView, но поскольку я сам занимаюсь всей навигацией, и мне нужен только ряд выбираемых элементов, NavigationView мне больше подошел.
Заранее спасибо.
Редактировать: Я уже пробовал
<Viewbox Width = "16" Height = "16" VerticalAlignment = "Center" Margin = "2,0,0,0" Visibility = "{x:Bind Selected, Converter = {StaticResource BoolToVisibilityConverter}, Mode = "OneWay"}">
И
private void NavView_OnItemInvoked(NavigationView sender, NavigationViewItemInvokedEventArgs args)
{
if (args.InvokedItem is TabNavigationItem t)
{
t.Selected = true;
}
Bindings.Update();
}





вы можете скрыть кнопку с помощью свойства видимости. Я бы создал конвертер для этой задачи, который принимает логическое значение и возвращает видимое или свернутое значение.
Вместо Bindings.Update вы должны реализовать INotifyPropertyChanged в своем классе TabNavigationItem и активировать событие PropertyChanged внутри установщика свойств Selected. Таким образом, он должен уведомлять пользовательский интерфейс и правильно обновлять видимость кнопки. Также не забудьте отменить выбор всех других элементов.
Рад, что помог :-). Удачного кодирования!
Начиная с юбилейного обновления (август 2016 г.), XAML выполняет эту работу автоматически. ;)