C#:
private void SW_btnMouseOverHighlight(object sender, System.Windows.Input.MouseEventArgs e)
{
Type type = sender.GetType();
PropertyInfo bgColor = type.GetProperty("Background");
if (bgColor != null)
{
String color = bgColor.GetValue(sender).ToString();
Color col = (Color)ColorConverter.ConvertFromString(color);
col.R += ShipWeaponUIConstants.mouseOverHighlightIntensity;
col.G += ShipWeaponUIConstants.mouseOverHighlightIntensity;
col.B += ShipWeaponUIConstants.mouseOverHighlightIntensity;
var brush = new SolidColorBrush(col);
//bgColor.SetValue(sender, brush);
}
}
XAML:
<Style x:Key="CustomToggleButton" TargetType="{x:Type ToggleButton}" BasedOn="{StaticResource ToggleButtonColor}">
<EventSetter Event="MouseEnter" Handler="SW_btnMouseOverHighlight"/>
<EventSetter Event="MouseLeave" Handler="SW_btnMouseOverHighlightRemove"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ToggleButton}">
<ControlTemplate.Triggers>
<Trigger Property="IsChecked" Value="True">
<Setter Property="Background" Value="#FF45B62C"/>
<Setter Property="Foreground" Value="#FF222222"/>
<Setter TargetName="borderLight" Property="BorderBrush" Value="#FF333333"/>
<Setter TargetName="borderDark" Property="BorderBrush" Value="#FF777777"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
所以我有一个切换按钮。检查时,背景会改变颜色。 (通过xaml中的触发器) 我还有一个C#函数,它采用按钮的颜色并使其变亮以显示鼠标在它上面。
这两个功能都可以自行运行,但是当我启用它们时,C#函数中的颜色变换将通过xaml触发器覆盖任何后续颜色变化。
我知道如何解决这个问题吗?
答案 0 :(得分:0)
这当然是因为本地值(由属性设置器中的init/signIn
设置)比样式设置器中的值高value precedence。
请尝试使用SetValue
。您还应该通过DependencyObject.SetCurrentValue
获取属性值,而不是反射。
DependencyObject.GetValue