Почему это поведение кнопок отличается в WP7 - PullRequest
4 голосов
/ 11 августа 2011

Две кнопки:

    <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="10,10,0,0" Name="button1" VerticalAlignment="Top" Width="160" Click="button1_Click" />
    <Button Content="Button" Height="72" HorizontalAlignment="Left" Margin="10,92,0,0" Name="button2" VerticalAlignment="Top" Width="160" />

Самоочевидный код:

    public MainPage()
    {
        InitializeComponent();
        button1.Background = new SolidColorBrush(Colors.Red);            
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        Color c = ((SolidColorBrush)((Button)sender).Background).Color;

        if (c == Colors.Red)
        {
            c = Colors.Green;
        }
        else if (c == Colors.Green)
        {
            c = Colors.Blue;
        }
        else if (c == Colors.Blue)
        {
            c = Colors.Red;
        }
        else
        {
            c = Colors.Yellow;
        }

        ((Button)sender).Background = new SolidColorBrush(c);
        button2.Background = new SolidColorBrush(c);
    }

В обычном приложении Silverlight все работает точно так, как ожидалось. Однако в Windows Phone 7 точно такой же код ведет себя следующим образом:

button1 не меняет цвет (он остается красным) button2 действительно меняет цвет, если я не нажимаю на него, в этом случае он больше не меняет цвет, когда я нажимаю button1 (т.е. его цвет теперь тоже застрял)

Подсказка? 1011 *

Ответы [ 2 ]

1 голос
/ 11 августа 2011

Следующие должны сделать трюк:

var btn = sender as Button;
var brush = ((SolidColorBrush)btn.Background);

if (brush.Color == Colors.Red)
    brush.Color = Colors.Green;
else if (brush.Color == Colors.Green)
    brush.Color = Colors.Blue;
else if (brush.Color == Colors.Blue)
    brush.Color = Colors.Red;
else
    brush.Color = Colors.Yellow;

btn.Background = brush;
button2.Background = brush;
0 голосов
/ 11 августа 2011

Я бы попробовал что-то вроде этого, чтобы установить фон кнопки. Это запустит фоновый код в потоке кнопки (по крайней мере, насколько я понимаю)

        button2.Dispatcher.BeginInvoke(delegate
        {
             button2.Background = new SolidColorBrush(c);
        });

Я не уверен, что это что-то исправит, но стоит попробовать.

-Woody

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...