2012-01-17 63 views
0

我有一個列表框控件添加到我的佈局,如下面的代碼片段所示。Silverlight Listbox在運行時的更新風格

<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,因爲我在運行時獲取了這個值。所以如何改變它,還有一件事我想要在構造函數或頁面加載事件中做到這一點,即我想只設置一次,它應該適用於所有的項目,即如果有100個項目,那麼它應該適用於所有100個項目。所以它使得它更快,而不是始終綁定任何事件。

回答

0

做到這一點,最簡單的方法是使用下面的XAML的樣式到用戶控件的屬性綁定:

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

然後你只需要更新屬性和樣式將反映新字體所有列表項。

更新: 這個答案是唯一有效的Silverlight 5

+0

嘿HIE感謝您的答覆。我嘗試了你建議的方式,但無法使代碼正常工作。你能告訴我「ListFont」是一個屬性嗎?我在「AncestorType」中收到錯誤,它不能作爲intellisense中的相​​對源。如果可能的話你可以解釋一下,或者只是分享一段代碼,以便我有一個清晰的理解。 – AKROCKS 2012-01-18 14:05:11

+0

我不確定是否可以將樣式綁定到SL 4及更低版本中的父屬性。我發現這篇文章允許設置控件綁定,但它不適用於樣式:http://blog.thekieners.com/2010/09/08/relativesource-binding-with-findancestor-mode-in-silverlight / – Slugart 2012-01-20 08:50:25