0

Rectangle の色を動的に変更しようとしていますが、変更しようとしても何も起こりません

<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>

最初の 2 つの Rectangles は機能しますが、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の塗りつぶし値を変更しません。何が間違っているのかわかりません。どんな助けでも大歓迎です。

変更を反映するようにコードを更新しました

更新: 解決済み 問題は、ビジュアル スタジオが正しく更新されないことです。コードは 7.1 では機能しますが、8.0 では機能しません。

4

2 に答える 2

1

私の意見では、問題は四角形のマージンです。Fill を xaml の静的な Color に変更します。そして、あなたがそれを見ることができるかどうかを確認してください。私はそれをテストしましたが、表示されません。だから、私はそれを変更しました。私の意見では、 Fill をColor ではなくSolidColorBrushに設定する必要があります。また、.x​​aml から DataContext を削除します。

最初の解決策:

そしてViewModel:

 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;

2番目の解決策(より良い):

ただし、引き続き 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

XamlDataContextで 1 回、コードで 1 回の 2 回セットがあり、Fill の color プロパティを設定する必要FillはありBrushません。Color

<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 に答える