Я пытаюсь создать пользовательский AppBarToggleButton для CommandBar, который будет реагировать как кнопка избранное / не избранное , используя только XAML ThemeResource. Я хочу изменить значок с OutlineStart
на SolidStar
и метку кнопки с Favorite
на Unfavorite
, как показано на скриншоте ниже. Точный результат, которого я хочу достичь, находится здесь .
Вот код, стоящий за этим: Github Gist
Моя проблема в том, что пока этот код отлично работает в приложении XAML Studio , выбрасывает Uncaught exception
в сообществе Visual Studio 2017 . Он также отлично работает в Visual Studio конструктор.
Я знаю, что могу добиться того же с помощью кода, подобного
private void ToggleFavorite_Checked(object sender, RoutedEventArgs e) {
ToggleFavorite.Text = "Unfavorite";
ToggleFavorite.Icon = new SymbolIcon(Symbol.SolidStar);
}
private void ToggleFavorite_Unchecked(object sender, RoutedEventArgs e) {
ToggleFavorite.Text = "Favorite";
ToggleFavorite.Icon = new SymbolIcon(Symbol.OutlineStar);
}
, но это не то, что я хочу, я заинтересован в настройке XAML и хочу сделать это именно из XAML стиль.
Что я могу сделать, чтобы она работала в Visual Studio 2017 ?
РЕДАКТИРОВАТЬ (05.03.2020) : После пересмотра моего кода я заметил, что Visual Studio выделяет эту строку как ошибку
<Setter Target="Content.Foreground" Value="{ThemeResource AppBarToggleButtonForegroundPointerOver}"/>
Это произошло потому, что я изменил имя ContentPresenter
с Content
на ViewboxContentPresenter
здесь
<Viewbox x:Name="ContentViewbox" AutomationProperties.AccessibilityView="Raw" HorizontalAlignment="Stretch" Height="{ThemeResource AppBarButtonContentHeight}" Margin="{ThemeResource AppBarButtonContentViewboxCollapsedMargin}">
<ContentPresenter x:Name="ViewboxContentPresenter" Foreground="{TemplateBinding Foreground}">
<ContentPresenter.Content>
<SymbolIcon Symbol="OutlineStar" />
</ContentPresenter.Content>
</ContentPresenter>
</Viewbox>
Итак, вот почему Unhandled Exception
было брошено. После переименования всех целей этого сеттера все начало работать как положено.