Я создал страницу WPF, и у меня должна быть возможность изменить тему (темная тема и светлая тема). Я новичок в WPF и нашел решение моей проблемы с помощью DataTrigger, но это не работает. Через 3 часа я пытался как 10 различных решений/учебники, но я не знаю, что я делаю неправильно ...WPF DataTrigger не работает.
Код XML:
<Page
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:VMQWPFApplication.Pages" x:Class="VMQWPFApplication.Pages.MainPage"
mc:Ignorable="d"
d:DesignHeight="400" d:DesignWidth="600"
Title="MainPage">
<Page.Resources>
<Style x:Key="styleWithTrigger" TargetType="{x:Type Rectangle}">
<Setter Property="Fill" Value="Blue"/>
<Style.Triggers>
<DataTrigger Binding="{Binding DarkTheme, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:MainPage}}}" Value="True">
<Setter Property="Fill" Value="Red"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Page.Resources>
<DockPanel>
<!--Toolbar-->
...
<!--Body-->
<Grid>
<Rectangle Style="{StaticResource styleWithTrigger}"/>
</Grid>
</DockPanel>
А вот CS:
namespace VMQWPFApplication.Pages
{
/// <summary>
/// Interaction logic for MainPage.xaml
/// </summary>
public partial class MainPage : Page
{
public bool DarkTheme { get; set; }
public MainPage()
{
InitializeComponent();
DarkTheme = false;
}
private void TestButton_Click(object sender, RoutedEventArgs e)
{
DarkTheme = true;
}
}
}
В начале прямоугольник синий, но он не изменится.
поиска для 'INotifyPropertyChanged', вы должны реализовать этот интерфейс для ViewModel и повысить свойство правильно изменилось. –
@MrApfelstrudel 'MainPage' не реализует интерфейс' INotifyPropertyChanged', а 'DarkTheme' не вызывает событие' PropertyChanged' или не делает 'DarkTheme'' DependencyProperty' – dkozl
. Я бы также поставил ваш контекст данных на странице. DataContext = "{Binding RelativeSource {RelativeSource Self}}" –