2012-01-17 9 views
0

私は、以下のコードスニペットで示すように、リストボックスコントロールをレイアウトに追加しました。ランタイムでのSilverlightリストボックスの更新スタイル

<ListBox x:Name="lstFilters" ItemsSource="{Binding CustomerCollection, Source={StaticResource VMCustomers}}" ScrollViewer.VerticalScrollBarVisibility="Disabled" Height="200" Margin="12,20,235,80"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <HyperlinkButton Content="{Binding Name}" Style="{StaticResource styleFont}"></HyperlinkButton> 
          <TextBlock x:Name="txtFilterCount" Text="{Binding ContactNumber, Mode=TwoWay}"></TextBlock> 
        </StackPanel> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 

    <Style x:Key="styleFont" TargetType="HyperlinkButton"> 
      <Setter Property="FontFamily" Value="Verdana"></Setter> 
     </Style> 

フォントファミリをHyperlinkBut​​tonコントロールに設定するスタイルを記述しました。 今、私は実行時に値を取得しているので、このfontfamilyをコードの背後から設定したいと思います。それを変更する方法ともう1つのことをコンストラクタやページのロードイベントでこれをやりたいのです。つまり、これを一度だけ設定したいのですが、すべてのアイテムに適用する必要があります。つまり、100個のアイテムがあれば、 100項目。どんなイベントにも常にバインドするのではなく、より速くなります。

答えて

0

これを行う最も簡単な方法は、以下のXAMLを使用してユーザーコントロールのプロパティにスタイルをバインドすることです:

<Style x:Key="styleFont" TargetType="HyperlinkButton"> 
    <Setter Property="FontFamily" 
     Value="{Binding DataContext.ListFont, 
     RelativeSource={RelativeSource AncestorType=UserControl}}"> 
    </Setter> 
</Style> 

次に、あなただけのプロパティを更新する必要があり、スタイルはのための新しいフォントを反映しますすべてのリスト項目。

更新: この答えはシルバー5.

+0

ねえ返信用HIEのおかげでのみ有効です。私はあなたが提案した方法を試しましたが、コードを動作させることはできませんでした。 "ListFont"はプロパティ権利ですが、 "AncestorType"でエラーが出ています。intellisenseの相対的なソースとして利用できません。可能であれば、コードを説明したり分かち合うだけで、わかりやすいことができます。 – AKROCKS

+0

SL 4以下の親プロパティにスタイルをバインドすることが可能かどうかはわかりません。私はコントロールのバインディングを設定することができますが、それはスタイルのために動作しませんこの記事を発見:http://blog.thekieners.com/2010/09/08/relativesource-binding-with-findancestor-mode-in-silverlight / – Slugart

関連する問題