(WPF)如何在运行时更改ListBox项目/标题字体大小?

时间:2018-01-05 14:55:18

标签: c# wpf listbox styles

我想允许用户在运行时更改列表框的字体大小。实现这一目标的最简单方法是什么? (另外,有没有办法简化代码?)

这是我的列表的xaml:https://pastebin.com/Y8q5W50S

<ListBox Grid.Row="1" Grid.Column="1" Name="CardsListBox" ItemsSource="{Binding Path=placement}" 
         Background="Transparent" BorderBrush="Transparent">
    <ListBox.GroupStyle>
        <GroupStyle>
            <GroupStyle.ContainerStyle>
                <Style TargetType="{x:Type GroupItem}">
                    <Setter Property="Template">
                        <Setter.Value>
                            <ControlTemplate TargetType="{x:Type GroupItem}">
                                <Expander IsExpanded="True" Style="{StaticResource ExpanderStyle}">
                                    <Expander.Header>                                                
                                        <TextBlock Text="{Binding Name}" Style="{StaticResource PlacementHeaderStyle}" />                                               
                                    </Expander.Header>
                                    <ItemsPresenter IsEnabled="False" />
                                </Expander>
                            </ControlTemplate>
                        </Setter.Value>
                    </Setter>
                </Style>
            </GroupStyle.ContainerStyle>
        </GroupStyle>
    </ListBox.GroupStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="10" />
                        <ColumnDefinition Width="10" />
                        <ColumnDefinition Width="Auto" />
                    </Grid.ColumnDefinitions>                           
                    <TextBlock Grid.Column="0" Text="{Binding Path=power}" Style="{StaticResource CardPowerStyle}" />
                    <TextBlock Grid.Column="2" Text="{Binding Path=name}" Style="{StaticResource CardNameStyle}" />
                </Grid>
            </StackPanel>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

1 个答案:

答案 0 :(得分:0)

所以这是一个例子:ListBox项目模板内的字体大小是从ViewModel绑定的。相同的值也绑定到滑块,以便您可以检查它的工作原理并在运行时更改它。

首先,您必须创建视图模型,您必须保留字体大小的值。视图模型必须实现INotify属性的更改。

$("#entryJurnal_table tbody").on("click", ".delete", function () {      
      t.row($(this).parents('tr')).remove().draw();
});

下一步是将视图模型设置为视图数据上下文,例如像这样(请结账,例如,Caliburn Micro或Prism自动生成)。

  public class MainWindowViewModel : INotifyPropertyChanged
{
    public MainWindowViewModel()
    {
        Items = new ObservableCollection<string> {"item1", "item2"};
        _fontSize = 12d;
    }

    public ObservableCollection<string> Items { get; set; }

    private double _fontSize;

    public double FontSize
    {
        get => _fontSize;
        set
        {
            _fontSize = value;
            OnPropertyChanged(nameof(FontSize));
        }
    }

    #region INotifyPropertyChangedImplementation

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }
    #endregion
}

之后,使用从ListBox项模板到窗口DataContext(MainWindowViewModel)的相对源绑定将字体大小绑定到列表。

前:

 /// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        DataContext = new MainWindowViewModel();
        InitializeComponent();
    }
}

我已附上工作项目。

很抱歉没有详细说明我稍后会更新。

Sample Project