0

我试图动态改变矩形的颜色但是当我尝试改变它时没有任何反应

<Grid x:Name="LayoutRoot">
    <Grid Name="rootgrid" Margin="0,10,0,-10">

        <Rectangle Name="box3" HorizontalAlignment="Stretch" Margin="56,500,71,182">
            <Rectangle.Fill>
                <SolidColorBrush Color="{Binding color1}" />
            </Rectangle.Fill>
        </Rectangle>
    </Grid>

前两个矩形有效,但 box3 不显示颜色

public Program()
{
    InitializeComponent();
    MyColors color = new MyColors();
    color.color1 = Colors.Yellow;
    box3.DataContext = new SolidColorBrush(Colors.Yellow);;
}


private SolidColorBrush _color1;

    // Declare the PropertyChanged event.
    public event PropertyChangedEventHandler PropertyChanged;

    // Create the property that will be the source of the binding.
    public SolidColorBrush color1
    {
        get { return _color1; }
        set
        {
            _color1 = value;
            NotifyPropertyChanged("color1");
        }
    }

    public void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this,
                new PropertyChangedEventArgs(propertyName));
        }
    }

上面没有抛出任何错误,但它改变了 box3 的填充值,我不确定我做错了什么。任何帮助将不胜感激。

更新了代码以反映更改

更新:已解决问题是 Visual Studio 没有正确更新代码在 7.1 中有效,但在 8.0 中无效

4

2 回答 2

1

在我看来,问题是矩形的边距。将填充更改为 xaml 中的一些静态颜色。看看你能不能看到它。我已经测试过了,它没有显示出来。所以,我改变了它。在我看来,您必须将 Fill 设置为SolidColorBrush,而不是 Color。还要从 .xaml 中删除 DataContext。

第一个解决方案:

和视图模型:

 public class MyColors : INotifyPropertyChanged
    {
        private SolidColorBrush _color1;

        // Declare the PropertyChanged event.
        public event PropertyChangedEventHandler PropertyChanged;

        // Create the property that will be the source of the binding.
        public SolidColorBrush color1
        {
            get { return _color1; }
            set
            {
                _color1 =value;
                NotifyPropertyChanged("color1");
            }
        }

        public void NotifyPropertyChanged(string propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this,
                    new PropertyChangedEventArgs(propertyName));
            }
        }
    }

和 MainPage 构造函数:

    InitializeComponent();
    MyColors color = new MyColors();
    color.color1 = new SolidColorBrush(Colors.Yellow);
    box3.DataContext = color;

第二种解决方案(更好):

但是,如果您仍然想使用 Color,您可以像这样通过 xaml 更改它:

<Rectangle Name="box3" HorizontalAlignment="Stretch" Margin="56,500,71,182">
    <Rectangle.Fill>
        <SolidColorBrush Color="{Binding color1, Mode=OneWay}" />
    </Rectangle.Fill>
</Rectangle>">
于 2013-08-06T04:55:01.417 回答
0

您有DataContext两次设置,一次在 Xaml 中,一次在代码中,不是Fill您必须设置 Fill 的颜色属性BrushColor

<Rectangle Name="box3" HorizontalAlignment="Stretch" Margin="56,500,71,182">
    <Rectangle.Fill>
        <SolidColorBrush Color="{Binding color1}" />
    </Rectangle.Fill>
</Rectangle>
于 2013-08-06T04:47:53.950 回答