I have two grids inside a grid.
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Grid x:Name="grid1" MouseLeftButtonDown="Grid_MouseLeftButtonDown" Grid.Column="0">
<TextBlock FontSize="50" Text="1" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
<Grid x:Name="grid2" MouseLeftButtonDown="Grid_MouseLeftButtonDown" Grid.Column="1">
<TextBlock FontSize="50" Text="2" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Grid>
</Grid>
I am using this method for adding style to grids in runtime.
private void StyleGrid()
{
var converter = new System.Windows.Media.BrushConverter();
Style myS = new System.Windows.Style();
Setter setter1 = new Setter();
setter1.Property = Grid.BackgroundProperty;
setter1.Value = (Brush)converter.ConvertFromString("#3F3F46");
myS.Setters.Add(setter1);
Setter setter = new Setter();
setter.Property = Grid.BackgroundProperty;
setter.Value = (Brush)converter.ConvertFromString("#54545C");
Trigger trigger = new Trigger();
trigger.Property = Grid.IsMouseOverProperty;
trigger.Value = true;
trigger.Setters.Add(setter);
myS.Triggers.Add(trigger);
grid1.Style = myS;
grid2.Style = myS;
}
I am calling this method after InitializeComponent method. Everything works fine.
And this is MouseLeftButtonDown event for grids.
private void Grid_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
Grid senderGr = sender as Grid;
StyleGrid();
var converter = new System.Windows.Media.BrushConverter();
var brush = (Brush)converter.ConvertFromString("#007ACC");
senderGr.Background = brush;
}
This method must change sender grid’s background color and must change style of other grid. But it is not changing style.
You can download and test project from SkyDrive if you have Microsoft account. Thanks.
https://skydrive.live.com/redir?resid=89FD450CC0CC74DA!168
Setting the Background directly will always override the defined Style. WPF uses a set order in which it determines the actual value of a Dependency Property (see http://msdn.microsoft.com/en-us/library/ms743230.aspx)
To achieve your result just clear the set values in your StyleGrid() method: