1

「プレイリスト」があり、「プレイリスト」を強調したい。

私はこれを試しました

<!-- Row 5: Playlist -->
    <ListBox x:Name="Tracks" MinHeight="400" Grid.Row="5" Margin="20">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <DockPanel Height="44" Width="436" Dock="Left">
                    <StackPanel Orientation="Vertical" Width="374" Name="Wrapper">
                        <Label Content="{Binding Path=title}"  Name="Test" Foreground="CornflowerBlue" FontSize="14" Padding="0" />
                        <Label Content="{Binding Path=artist}" Foreground="DarkGray"       FontSize="14" Padding="0" />
                    </StackPanel>
                    <Label Content="{Binding Path=DurationFormatted}" Foreground="DarkGray" Width="62" Padding="0" DockPanel.Dock="Right" HorizontalContentAlignment="Right" />
                </DockPanel>
                <DataTemplate.Triggers>
                    <DataTrigger Binding="{Binding Path=NowPlaying}" Value="True">
                        <Setter TargetName="Wrapper" Property="Background" Value="LightBlue"/>
                        <Setter TargetName="Test" Property="FontSize" Value="24"/>
                        <Setter Property="ListBoxItem.Foreground" Value="Red" />
                    </DataTrigger>
                </DataTemplate.Triggers>
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

この

<ListBox.ItemTemplate>
same stuff without Triggers section
<ListBox.ItemContainerStyle>
    <Style TargetType="{x:Type ListBoxItem}">
       <Style.Triggers>
           <DataTrigger Binding="{Binding Path=NowPlaying}" Value="True">
              <Setter Property="ListBoxItem.Background"  Value="Red" />
           </DataTrigger>
       </Style.Triggers>
    </Style>
</ListBox.ItemContainerStyle>

NowPlayingはオーディオモデルのブールプロパティであり、デバッガーで現在のオブジェクトが実際にNowPlaying==trueになることを確認しました。ただし、このトリガーはどちらもアイテムの外観を変更しません。私が間違っているのは何ですか?また、私は命令型が好きです。コードビハインドからこれを行うのは簡単ですか?

PS私はテストのためだけに強調されたアイテムに極値を設定しました:)

4

1 に答える 1

4

INotifyPropertyChangedインターフェイスを実装して、NowPlayingプロパティを上げる必要があることを覚えておいてください。これがないと、バインディングエンジンはプロパティが変更されたことを認識できないため、ビューを更新できません。

そして、ほんの少しの追加です。私は間違いなく最初のアプローチを支持します。データトリガーを回避するようにしてください。実際、すべてのビジネスデータ関連のデータバインディングは可能な限りスタイルで行われます。スタイルにはビューデザインのみが含まれることになっており、DataTemplatesは実際のデータを表示するために使用されます。これを分離しておくと、スタイルを再利用するのがはるかに簡単になります。

于 2013-03-26T09:27:42.740 に答える