0

良い一日!

私はかなりの時間をかけて、自分の映画コレクションを簡単にブラウズして再生できる独自の HTPC アプリを作成しました。私は別の小さなアプリを作成しました。これはすべてのインデックスを作成し、以下に示すレイアウトの XML ファイルを準備します。

すべて正常に機能していますが、いくつかの並べ替えオプションを実装したいと思います。「S」キーを押すことで、「タイトル別」、「リリース日別」、「ジャンル別」など、いくつかの固定された並べ替え方法を繰り返したいと思います...

私の XAML はオンラインで見つけたもののマッシュアップです。残念ながら私は専門家ではなく、乱雑なコードに表示されます。基本的にはファンアートを背景として表示し、画面の下部に水平方向のスクロール ストリップがあり、そこでムービーを選択できます (選択したムービーは画面の中央に保持されます)。

どうすればこの問題を解決できますか?

<MOVIES>
  <MOVIE>
    <TITLE></TITLE>
    <PATH></PATH>
    <FANART></FANART>
    <COVER></COVER>
    <RELEASEDATE></RELEASEDATE>
    etc...
  </MOVIE>
</MOVIES>


<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" WindowStartupLocation="CenterScreen" ResizeMode="NoResize" WindowState="Maximized" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" Height="350" Width="525" ShowInTaskbar="True" WindowStyle="None" Loaded="Window_Loaded">
<Window.Resources>
    <XmlDataProvider x:Key="MovieData"
               Source="movies.xml" />

    <DataTemplate x:Key="ItemTemplate">
        <Image Source="{Binding XPath=COVER}" Width="166" Height="250" Margin="0,0" MaxWidth="166" MaxHeight="250" MinWidth="166" MinHeight="250" Stretch="Fill" />
    </DataTemplate>

    <DataTemplate x:Key="SelectedItemTemplate">
        <Border BorderBrush="WhiteSmoke" BorderThickness="3">
            <Image Source="{Binding XPath=COVER}" Width="250" Height="375" Margin="0,0" MaxWidth="250" MaxHeight="375" MinWidth="250" MinHeight="375" Stretch="Fill" />
        </Border>
    </DataTemplate>

    <Style TargetType="{x:Type ListBoxItem}" x:Key="ContainerStyle">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent" />
            <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent" />
        </Style.Resources>
        <Setter Property="FocusVisualStyle">
            <Setter.Value>
                <Style />
            </Setter.Value>
        </Setter>
        <Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}" />
        <Style.Triggers>
            <Trigger Property="IsSelected" Value="True">
                <Setter Property="ContentTemplate" Value="{StaticResource SelectedItemTemplate}" />
            </Trigger>
        </Style.Triggers>
    </Style>

</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource MovieData}, XPath=/MOVIES/MOVIE}">
    <Grid.RowDefinitions>
        <RowDefinition Height="178*" />
        <RowDefinition Height="133*" />
    </Grid.RowDefinitions>
    <Grid.Background>
        <ImageBrush ImageSource="{Binding XPath=FANART}"/>
    </Grid.Background>
    <ListBox x:Name="Listbox1" 
             SelectionChanged="ScrollIntoView"
             ItemContainerStyle="{StaticResource ContainerStyle}"
             IsSynchronizedWithCurrentItem="True" 
             ItemsSource="{Binding}"
             HorizontalAlignment="Center" Grid.Row="1" VerticalAlignment="Bottom" KeyDown="Listbox1_KeyDown">
        <ListBox.Style>
            <Style TargetType="ListBox">
                <Setter Property="Template">
                    <Setter.Value>
                        <ControlTemplate TargetType="{x:Type ListBox}">
                            <Border>
                                <ScrollViewer x:Name="ScrollView1" HorizontalScrollBarVisibility="Hidden" VerticalScrollBarVisibility="Hidden" VerticalContentAlignment="Bottom" CanContentScroll="True">
                                    <VirtualizingStackPanel x:Name="SPanel1" IsItemsHost="True" Orientation="Horizontal" VerticalAlignment="Bottom"  HorizontalAlignment="Center"/>
                                </ScrollViewer>
                            </Border>
                        </ControlTemplate>
                    </Setter.Value>
                </Setter>
            </Style>
        </ListBox.Style>
    </ListBox>
</Grid>

4

1 に答える 1

3

リストボックスの KeyDown イベント ハンドラーでは、次のような呼び出しが必要です。

Listbox1.Items.SortDescriptions.Clear();
Listbox1.Items.SortDescriptions.Add(new SortDescription("TITLE", ListSortDirection.Descending));

これにより、ItemsSource にバインドするときに作成される既定のコレクション ビューに並べ替えの説明が追加されます。この方法でフィルタリングすることもできます。

並べ替えの説明のプロパティ テキストは、XPath セレクターにすることができます。

于 2012-06-16T20:09:06.280 に答える