一个播放按钮控制所有其他按钮动作WPF

时间:2013-11-27 09:11:05

标签: c# wpf animation button

可能非常简单,但我无法找到需要更改的代码,以使其工作。我的媒体位看起来像这样:

http://i.stack.imgur.com/0keGz.png

当我点击任何一个按钮上的游戏时,所有其他三个按钮也会改变。

        public void ButtonPlay1_OnClick(object sender, RoutedEventArgs e)
    {
        var context = DataContext as PlayButton.SampleContext;

        if (context == null)
            return;

        context.IsPlaying = !context.IsPlaying;
    }

    public void ButtonPlay2_OnClick(object sender, RoutedEventArgs e)
    {
        var context = DataContext as PlayButton.SampleContext;

        if (context == null)
            return;

        context.IsPlaying = !context.IsPlaying;
    }

    public void ButtonPlay3_OnClick(object sender, RoutedEventArgs e)
    {
        var context = DataContext as PlayButton.SampleContext;

        if (context == null)
            return;

        context.IsPlaying = !context.IsPlaying;
    }

我有三个不同的按钮按钮点击事件。我有一个类是BoolToVisabilityConverter,还有一个名为PlayButton的类,它只是检查按钮是否正在播放这是PlayButton类中的内容:

    public partial class PlayButton : xamlNewAudit
{
    public PlayButton()
    {
        InitializeComponent();
        DataContext = new SampleContext();
    }

    public class SampleContext : INotifyPropertyChanged
    {
        private bool _isPlaying;

        public bool IsPlaying
        {
            get { return _isPlaying; }
            set
            {
                if (_isPlaying == value)
                    return;

                _isPlaying = value;

                OnPropertyChanged("IsPlaying");
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged(string propertyName)
        {
            var handler = PropertyChanged;

            if (handler != null)
                handler(this, new PropertyChangedEventArgs(propertyName));
        }

编辑:很抱歉,我只是想要它,所以当我点击其中一个按钮上的播放时,其他两个按钮会暂停。

编辑:按钮的Xaml代码是;

            <Button x:Name="ButtonPlay" Height="45" Click="ButtonPlay1_OnClick" Margin="-2,0,57,60" DockPanel.Dock="Top">
            <Button.Template>
                <ControlTemplate TargetType="{x:Type Button}">
                    <Grid>
                        <Ellipse Stroke="Black" />

                        <Image Source="Images/PlayButton.png" Visibility="{Binding IsPlaying, ConverterParameter={x:Static Visibility.Hidden}, Converter={Application:BoolToVisibilityConverter}}" />

                        <Image Source="Images/pauseButton.png" Visibility="{Binding IsPlaying, ConverterParameter={x:Static Visibility.Visible}, Converter={Application:BoolToVisibilityConverter}}" />
                    </Grid>
                </ControlTemplate>
            </Button.Template>
        </Button>

这是第一个按钮的XAML代码,其他按钮的代码相同,但Click事件链接到不同的方法。

2 个答案:

答案 0 :(得分:1)

您有三个Button控件。您需要三个不同的IsPlaying属性,每个属性Button一个。您需要使用三个不同Click属性的三个不同IsPlaying处理程序。按照您的方式做事,您还需要三个不同的ControlTemplate,它们也使用三种不同的IsPlaying属性。


更新&gt;&gt;&gt;

有许多更简单的方法可以满足您的要求。一种方法是使用ToggleButton而不是Button。使用此功能,您可以忘记IsPlaying属性,只需使用ToggleButton.IsChecked值:

<ControlTemplate TargetType="{x:Type ToggleButton}">
    <Grid>
        <Ellipse Stroke="Black" />
        <Image Source="Images/PlayButton.png" Visibility="{Binding IsChecked, 
ConverterParameter={x:Static Visibility.Hidden}, Converter={StaticResource 
Application:BoolToVisibilityConverter}}" />
        <Image Source="Images/pauseButton.png" Visibility="{Binding IsChecked, 
ConverterParameter={x:Static Visibility.Visible}, Converter={StaticResource 
Application:BoolToVisibilityConverter}}" />
    </Grid>
</ControlTemplate>

你似乎已经宣布你的Converter非常奇怪......甚至编译了吗?

答案 1 :(得分:0)

如果对IsPlaying的绑定对于所有三个按钮都相同,那么当IsPlaying更改时,所有三个按钮都将改变。更改的最简单方法是为每个按钮分配一个单独的IsPlaying属性。