绑定值无法正常工作

时间:2014-12-03 10:41:35

标签: c# wpf xaml binding

我有代码:

<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).   (GradientBrush.GradientStops)[1].(GradientStop.Color)" Storyboard.TargetName="grid">
    <EasingColorKeyFrame KeyTime="0:0:0.5" Value="{Binding CorBackground}"/>
</ColorAnimationUsingKeyFrames>

颜色值定义为Value="#FFFFFF",我想要使用绑定来定义此颜色。 Value="{Binding CorBackground}。它有可能吗?

我在MainWindow.xaml.cs创建了一个属性,但没有工作:

private string _corBackground = string.Empty;
public string CorBackground
{
    get { return _corBackground; }
    set { _corBackground = value; }
}

3 个答案:

答案 0 :(得分:2)

如果您不想使用具有正确绑定的MVVM模式,可能的解决方案是在UserControl中使用DependecyProperty(如示例中名为“BackgroundColor”的SolidColorBrush属性)。你的MainWindow.cs看起来像

    public partial class MainWindow : Window
{
    public static readonly DependencyProperty BackgroundColorProperty = DependencyProperty.Register(
        "BackgroundColor", typeof (SolidColorBrush), typeof (MainWindow), new PropertyMetadata(default(SolidColorBrush)));

    public SolidColorBrush BackgroundColor
    {
        get { return (SolidColorBrush) GetValue(BackgroundColorProperty); }
        set { SetValue(BackgroundColorProperty, value); }
    }

    public MainWindow()
    {
        BackgroundColor = new SolidColorBrush(Colors.LightBlue);
        InitializeComponent();
    }

    private void ChangeBackgroundButton_OnClick(object sender, RoutedEventArgs e)
    {
        BackgroundColor = new SolidColorBrush(Colors.CornflowerBlue);
    }
}

您的网格背景属性绑定到“BackgroundColor”。

<Window x:Class="ListBoxStackoverflow.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525"
    x:Name="WindowsWithDependencyProperty">

<Grid Background="{Binding ElementName=WindowsWithDependencyProperty, Path=BackgroundColor}">
    <Button x:Name="ChangeBackgroundButton" 
            HorizontalAlignment="Left" VerticalAlignment="Top"
            Click="ChangeBackgroundButton_OnClick">Change Background</Button>
</Grid>

请注意,这只是一种可能的解决方案。

答案 1 :(得分:1)

我不确定这个属性是否可绑定,但通常应该是。如果是这样,您必须将控件的DataContext设置为包含您的属性的类的实例。

如果它在同一个控件/窗口/类中,那么构造函数中的简单this.DataContext = this或控件/窗口的Loaded事件中的任何内容都将为您完成任务。

答案 2 :(得分:1)

该类需要实现INotifyPropertyChanged,并且该属性需要在set方法中引发PropertyChanged事件,以使绑定正常工作。

还要确保您的对象将数据上下文设置为后面的代码。一种方法是在xaml窗口声明中。像这样设置数据上下文:

DataContext = {Binding RelativeSource = {RelativeSource.Self}}