Первый тест приложения для Windows Phone

Я скачал Microsoft Visual Studio 2010 Express для Windows Phone и написал простое приложение для первого тестирования эмулятора. В этом приложении у меня есть только кнопка со свойством Content, привязанным к строке с именем ButtonText, и со свойством Background, привязанным к SolidColorBrush с именем FillColor. Я обработал событие Click с помощью следующего кода:

    void MyButton_Click(object sender, RoutedEventArgs e)
    {
        if (toggle == true)
        {
            ButtonText = "Blue";
            FillColor = new SolidColorBrush(Colors.Blue);
        }
        else
        {
            ButtonText = "Red";
            FillColor = new SolidColorBrush(Colors.Red);
        }
        toggle = !toggle;
    }

К сожалению, это не работает. Хотя содержимое кнопки меняется при каждом нажатии кнопки, я не могу сказать то же самое для фона, который остается одного цвета.
Не могли бы вы сказать мне, что не так? Спасибо.

Я также публикую XAML:

    <Grid x:Name="ContentGrid" Grid.Row="1">
        <Button Name="MyButton" Width="300" Height="300"
                Content="{Binding Path=ButtonText}" 
                Background="{Binding Path=FillColor}" />
    </Grid>

person Maurizio Reginelli    schedule 11.06.2010    source источник
comment
Интересный. Кажется, button1.Background = new SolidColorBrush(Colors.Red); тоже не работает, так что не обязательная проблема. Возможно, стоит опубликовать это на Connect, если объяснение не ожидается ... в VS есть категория wp7.   -  person Mick N    schedule 12.06.2010
comment
Настройка fillColor = new SolidColorBrush(Colors.Red); работает для инициализации фона. Это не работает только тогда, когда это свойство изменено.   -  person Maurizio Reginelli    schedule 12.06.2010
comment
вы устанавливаете dataContext страницы?   -  person Chris Nicol    schedule 14.06.2010
comment
@Chris: да, знаю. Фактически изменяется свойство Content кнопки.   -  person Maurizio Reginelli    schedule 14.06.2010


Ответы (1)


Проблема связана с использованием «нового» в строке:

FillColor = новый SolidColorBrush(Colors.Blue);

Использование «новой» операции прерывает установленную ранее привязку данных. Вместо этого попробуйте использовать следующее:

Цвет Заливки.Цвет = Цвета.Синий;

Замените оба изменения на синий и красный, и это должно сработать.

HTH!
Крис

person Chris Koenig    schedule 23.06.2010
comment
Спасибо за ваш ответ. Тип FillColor не Color, а SolidColorBrush. Если я преобразую его в цвет, это не сработает, потому что тип фона не является цветом. Более того, я не согласен с вами, когда вы говорите, что новая операция нарушает привязку данных, на самом деле те же решения прекрасно работают на веб-сайте Silverlight. - person Maurizio Reginelli; 26.06.2010
comment
Если вы заметили в моем ответе, я предложил вам изменить значение свойства Color объекта FillColor, а не само свойство FillColor. В моем воссоздании вашей проблемы устранена основная проблема. Я столкнулся с той же проблемой с ObservableCollection, когда обновление экземпляра внутри вашего кода после привязки данных фактически нарушит привязку. Я могу предоставить полные примеры кода, чтобы показать это более подробно, если вам интересно... - person Chris Koenig; 28.06.2010
comment
Еще раз спасибо, Крис. Меня интересует ваш пример кода. Вы можете найти мою электронную почту в моем профиле. Я буду рад вашей помощи, если вы пришлете мне образцы кода. - person Maurizio Reginelli; 04.07.2010