指针离开按钮之前,背景颜色上的按钮绑定不会更新

时间:2015-03-23 09:29:49

标签: c# windows-store-apps inotifypropertychanged

我在代码后面创建了一个按钮,如下所示:

btnToggleOpen = new Button();

该按钮位于具有UserControl属性的自定义IsCollapsed内。 UserControl实现INotifyPropertyChanged接口,并在设置时调用PropertyChangedEvent

我为按钮的背景颜色创建了一个绑定(源contentp是自定义UserControl):

Binding backgroundBinding = new Binding();
backgroundBinding.Source = contentp;
backgroundBinding.Path = new PropertyPath("IsCollapsed");
backgroundBinding.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
backgroundBinding.Converter = new CollapsedSettingsPanelBackgroundValueConverter();

BindingOperations.SetBinding(contentp.BtnToggleOpen, Button.BackgroundProperty, backgroundBinding);

当我点击按钮时,IsCollapsed会被IsCollapsed = !IsCollapsed;切换。背景颜色确实会改变,但在我将指针移离按钮之前不会改变。当指针在按钮上方时,按钮的背景颜色似乎变得透明。

为什么按钮在指针结束时变为透明?如何在C#中创建按钮时覆盖它?

1 个答案:

答案 0 :(得分:1)

查看Button Styles and Templates按钮的默认模板,或者在设计器中选择按钮,右键单击,然后选择编辑模板。编辑副本...

在VisualState for PointerOver中,您将看到默认模板将前景和背景值设置为ButtonPointerOver ... ThemeBrushes的动画,覆盖您设置的Background属性:

<VisualState x:Name="PointerOver">
    <Storyboard>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Background" Storyboard.TargetName="Border">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPointerOverBackgroundThemeBrush}"/>
        </ObjectAnimationUsingKeyFrames>
        <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="Foreground" Storyboard.TargetName="ContentPresenter">
            <DiscreteObjectKeyFrame KeyTime="0" Value="{ThemeResource ButtonPointerOverForegroundThemeBrush}"/>
        </ObjectAnimationUsingKeyFrames>
    </Storyboard>
</VisualState>

当您将指针移离按钮时,它会转换回默认状态并恢复为设定值。

您可以通过编辑使用“编辑模板”创建的副本来覆盖此项。编辑副本...菜单。您可能仍希望按钮更改以指示指针,但您可能希望它更改为与新颜色相关的内容,类似于默认背景是透明的方式,默认ButtonPointerOverBackgroundThemeBrush大多是透明的,但带有轻微的黑色或白色色调取决于它是以光还是暗为主题。