2012-01-17 59 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