2009-06-15 8 views
1

私の大学のプロジェクトのためにWPF ListBoxフォトアルバムを作成したいと思います。アイテムをWPFリストボックススタイルでローテーションする方法は?

DataTemplate/ListBoxスタイルは、写真が混乱しているように見えるようにする必要があります。つまり、上のアイテムがフォーカス/選択されています(下の図を参照)。図面を参照して

Image here

alt text http://img26.imageshack.us/img26/3975/demoqbe.jpg

  • 項目1)
  • 項目2に示されていない))スタック
  • 項目3の背面にあります2と4の真ん中で
  • 4)はフォーカスにある
  • 項目5)は、私が最も迷惑回転と重なるようにアイテムを取得し、最も困難な作業は、上部に表示されるように焦点内の項目を取得しているが生じています

が示されていません。

私はVisual Basicを使用しています。私はまだC#をマスターしていないため、VBで使用する場合や、主にWPFを使用する場合に便利です。

答えて

0

アイテムを回転させるには、Transformsを使用する必要があります。このケースで最も関連性のあるものは、Rotate Transformです。またランダムな散らばった外観を与えるために、ObjectDataProviderを使用して、他の角度を生成することができます。

私はVBは分かりませんが、これに関わる唯一のC#は非常に簡単で、簡単に転送できるはずです。

イメージリソースパスに簡単に切り替えることができる、色のような簡単なものを使用できます。ここでは、ColorsのObservableCollectionと、角度を生成するために使用する別のクラスもあります。0から360までの数値を返すだけです。これを使用して各アイテムを回転させます。

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 

     Colors = new ObservableCollection<string>(); 
     Colors.Add("Red"); 
     Colors.Add("Blue"); 
     Colors.Add("Green"); 
     Colors.Add("Yellow"); 

     this.DataContext = this; 
    } 

    public ObservableCollection<string> Colors 
    { 
     get; 
     set; 
    } 
} 

public class AngleService 
{ 
    private static Random rand = new Random(); 

    public int GetAngle() 
    { 
     return rand.Next(0, 90); 
    } 
} 

XAMLでは、角度を生成するために使用できるリソースを作成できるようになりました。

<Window.Resources> 
    <local:AngleService x:Key="Local_AngleService" /> 
    <ObjectDataProvider x:Key="Local_AngleProvider" 
         x:Shared="False" 
         ObjectInstance="{StaticResource Local_AngleService}" 
         MethodName="GetAngle" /> 
</Window.Resources> 

ここでは、アイテムを表示するために何かを作成する必要があります。 ListBoxに配置し、各カラーアイテムの背景を設定するためのデータテンプレートを追加したり、RotateTransformを適用することができます。

<ListBox ItemsSource="{Binding Colors}" 
     VerticalContentAlignment="Center" 
     HorizontalContentAlignment="Center"> 
    <ListBox.ItemTemplate> 
     <DataTemplate> 
      <Border x:Name="uiItemBorder" 
        BorderBrush="Black" 
        BorderThickness="2" 
        CornerRadius="3" 
        Background="{Binding}" 
        Width="50" 
        Height="50"> 
       <TextBlock Text="{Binding}" 
          VerticalAlignment="Center" 
          HorizontalAlignment="Center" /> 
       <Border.RenderTransform> 
        <RotateTransform Angle="{Binding Source={StaticResource Local_AngleProvider}}" /> 
       </Border.RenderTransform> 
      </Border> 
     </DataTemplate> 
    </ListBox.ItemTemplate> 
</ListBox> 

UIはまだそこから少しの作業が必要ですが、それはアイテムのローテーションに役立つはずです。

関連する問題