2012-01-10 7 views
1

私は自分のメニューコントロールのスタイルを作ったので、今度はそのスタイルをすべてのmenuItemに使用したいが、テキストボックスには異なるテキストが使われている。私はリストを使用してバインディング要素を設定することができるかどうか疑問に思っていました...私は試みましたが動作しませんでした...何かを見逃したり、別のものを使用しなければなりませんか?リストを使用してメニューコントロールでバインドすることはできますか?

List<string> itemArray = new List<string>(); 
     itemArray.Add("label1"); 
     itemArray.Add("label2"); 
     itemArray.Add("label3"); 
     Binding binding = new Binding(); 
     binding.Path = new PropertyPath("itemArray"); 

     this.menu1.SetBinding(TextBox.TextProperty, binding); 

、それが助け場合は、スタイルの一部は、ある...:

<Setter.Value> 
    <ControlTemplate TargetType="{x:Type MenuItem}"> 
     <Grid> 
      <Border Name="MainBorder" BorderThickness="2,2,2,0" > 
       <Grid> 
        <TextBlock Text="{Binding Path=itemArray}" Margin="30,10,0,0" FontFamily="Arial" FontSize="14" FontWeight="Bold" /> 
        <Image Width="15" Height="15" Source="image.PNG" Margin="-100,0,0,0" /> 
       </Grid> 
      </Border> 
     </Grid> 
    </ControlTemplate> 
</Setter.Value> 
+0

HeaderedItemsControl機能の概要については、[MenuItem](http://msdn.microsoft.com/en-us/library/system.windows.controls.menuitem.aspx)のMSDNドキュメントの「備考」セクションを参照してください。およびMenuItemsでのデータバインディングの使用方法について説明します。 – Clemens

答えて

1

あなたはList<T>にテキスト要素をバインドしようとしている、型名になります。メニューは、オブジェクトのリストから自分自身を投入したい場合は、そのリストに、メニューのItemsSourceプロパティをバインディング考えてみます。この例では

 <Menu ItemsSource="{Binding ListOfItems}"> 
     <Menu.ItemTemplate> 
      <DataTemplate> 
       <MenuItem Header="{Binding Text}" Command="{Binding Command}" /> 
      </DataTemplate> 
     </Menu.ItemTemplate> 
    </Menu> 

を、各リスト項目は、として表示Textプロパティを持つオブジェクトです表示文字列、およびICommandを実装するオブジェクトであるCommandプロパティです。ユーザーがメニュー項目を選択すると、そのリスト項目のCommand.Executeメソッドが呼び出されます。 RelayCommandまたはReactiveCommandのようなものを使用して、メソッド呼び出しに変換することができます。

これにより、フラットメニューが可能になります。階層的なメニューの場合は、少し違うことをする必要があります。

関連する問題