1

ブール値と値で変化するボタンを作成したいisMouseOver

  • プレイヤーがプレイ中 -> Pause_grey.png
  • プレーヤーが再生中 & mouseIsOver-> Pause_blue.png
  • プレイヤーが停止中 -> Play_grey.png
  • プレイヤーが停止 & mouseIsOver -> Play_blue.png

これを 4 で実行したいのですMultiDataTriggerが、playStatus(のブール値dataContext) が変更されると、ボタンはそれを認識しません

コード:

ボタン:

<Button Name="btnPlayPause" Grid.Column="2" Grid.Row="0" Click="musikPlayer_btnClick" HorizontalAlignment="Center" Style="{StaticResource PlayPauseButton}"></Button>

ボタンのスタイル:

<Style TargetType="{x:Type Button}" x:Key="PlayPauseButton">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type Button}">
                            <StackPanel Orientation="Horizontal" >
                                <Image Name="PART_Image" Source="graphics/Pause_grey.png" VerticalAlignment="Center" RenderOptions.BitmapScalingMode="HighQuality" ></Image>
                            </StackPanel>
                            <ControlTemplate.Triggers>



                                <MultiDataTrigger >
                                    <MultiDataTrigger.Conditions>
                                        <!--is not playing and mouse is not over-->
                                        <Condition Binding="{Binding playStatus}" Value="false"/>
                                        <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="false" />
                                    </MultiDataTrigger.Conditions>
                                    <Setter Property="Source" Value="graphics/Play_grey.png" TargetName="PART_Image"/>
                                </MultiDataTrigger>



                                <MultiDataTrigger >
                                    <MultiDataTrigger.Conditions>
                                        <!--is not playing and mous is over-->
                                        <Condition Binding="{Binding playStatus}" Value="false"/>
                                        <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True" />
                                    </MultiDataTrigger.Conditions>
                                    <Setter Property="Source" Value="graphics/Play_blue.png" TargetName="PART_Image"/>
                                </MultiDataTrigger>




                                <MultiDataTrigger >
                                    <MultiDataTrigger.Conditions>
                                        <!--is playing and mous is not over-->
                                        <Condition Binding="{Binding playStatus}" Value="true"/>
                                        <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="false" />
                                    </MultiDataTrigger.Conditions>
                                    <Setter Property="Source" Value="graphics/Pause_grey.png" TargetName="PART_Image"/>
                                </MultiDataTrigger>


                                <MultiDataTrigger >
                                    <MultiDataTrigger.Conditions>
                                        <!--is playing and mouse is over-->
                                        <Condition Binding="{Binding playStatusy}" Value="true"/>
                                        <Condition Binding="{Binding IsMouseOver, RelativeSource={RelativeSource Self}}" Value="True" />
                                    </MultiDataTrigger.Conditions>
                                    <Setter Property="Source" Value="graphics/Pause_blue.png" TargetName="PART_Image"/>
                                </MultiDataTrigger>



                            </ControlTemplate.Triggers>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>

誰でもこれを機能させる方法を知っていますか?:)

EDIT1:

方法がわからない、またはINotifyPropertyChanged値のためにセットアップできるかどうか:

public Boolean playStatus { get { return !model.getMusicPlayer().getStream1_pause(); } }

EDIT2: これを試しましたが、うまくいきません

   protected void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
            handler(this, e);
    }

    protected void OnPropertyChanged(string propertyName)
    {
        OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

    public bool stream1_pause
    {
        get { return Stream1_pause; }
        set
        {
            if (value != Stream1_pause)
            {
                Stream1_pause = value;
                OnPropertyChanged("stream1_pause");
            }
        }
    }



    public event PropertyChangedEventHandler PropertyChanged;

listView でできるように update を手動で呼び出す必要があるかもしれませんが、条件を更新する方法がわかりません。ListView では次のようになります。

BindingOperations.GetBindingExpressionBase(songs, ListView.ItemsSourceProperty).UpdateTarget();

だから私は試しました:

 BindingOperations.GetBindingExpressionBase(btnPlayPause, Button.StyleProperty).UpdateTarget();

しかし、それは言う:

System.NullReferenceException

……問題はなぜですか?

4

0 に答える 0