Silverlight Listbox在运行时更新样式

时间:2012-01-17 09:43:12

标签: silverlight-4.0

我的布局中添加了一个列表框控件,如下面的代码段所示。

 <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项。所以它使它更快,而不是总是绑定任何事件。

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用以下XAML将样式绑定到UserControl的属性:

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

然后您只需要更新属性,样式将反映所有列表项的新Font。

<强>更新 此答案仅对Silverlight 5有效。