У меня вопрос о приоритете значения свойства зависимости. Мой .xaml выглядит следующим образом:
<Window x:Class="WpfTests.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local ="clr-namespace:WpfTests"
Title="MainWindow" Height="350" Width="525">
<Window.Style>
<Style>
<!--<Setter Property="Canvas.Background" Value="Gray"/>-->
<Style.Triggers>
<Trigger Property="local:MainWindow.IsMouseOver" Value="True">
<!--<Setter Property="local:LeistenPfeil.Symbolfarbe" Value="Red"/>-->
<Setter Property="local:MainWindow.Cursor" Value="Hand" />
<Setter Property="local:MainWindow.BG" Value="Blue"/>
</Trigger>
</Style.Triggers>
</Style>
</Window.Style>
<Grid Background="{Binding BG,Mode=TwoWay}">
<Button Content="ChangeBG" HorizontalAlignment="Center" VerticalAlignment="Center" Click="OnClick"/>
</Grid>
In my Codebehind I created the dependency property 'BG' like:
public partial class MainWindow : Window
{
public Brush BG
{
get { return (Brush)GetValue(BGProperty); }
set { SetValue(BGProperty, value); }
}
// Using a DependencyProperty as the backing store for BG. This enables animation, styling, binding, etc...
public static readonly DependencyProperty BGProperty =
DependencyProperty.Register("BG", typeof(Brush), typeof(MainWindow), new PropertyMetadata(Brushes.Black));
public MainWindow()
{
InitializeComponent();
this.DataContext = this;
}
private void OnClick(object sender, RoutedEventArgs e)
{
BG = Brushes.Green;
}
}
Итак, при запуске фон устанавливается черным (по умолчанию для DP). При наведении мыши фон становится синим. Когда дело доходит до изменения свойства BG в моем отделенном коде, триггер действительно работает, но его влияние на фон сетки исчезло. Я уже читал эту статью в MSDN: https://msdn.microsoft.com/en-us/library/ms743230%28v=vs.110%29.aspx
Насколько я понимаю, проблема заключается в следующем: почему триггер работает, когда свойство BG имеет значение по умолчанию, и не работает, когда оно изменяется в коде? => Наивысший приоритет фона — это локальная фоновая привязка сетки, так почему же триггер вообще работает?
Как я могу снова заставить триггер работать после изменения свойства BG в коде?
Background="{Binding BG,Mode=TwoWay}"
не устанавливает значение свойства BG. Здесь BG является источником привязки, а не целью. - person Clemens   schedule 09.06.2015