Как изменить шрифт в динамически создаваемом textbox'e

Это моя View:

<StackPanel>
    <ItemsControl Name="Control" ItemsSource="{Binding TestList}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel Orientation="Horizontal">
                    <TextBlock Name="Block" Text="{Binding Id}" ></TextBlock>
                    <TextBox Text="{Binding Text}" FontSize="{Binding FontSize}" Tag="{Binding Id}" PointerReleased="InputElement_OnPointerReleased"></TextBox>
                    <CheckBox IsChecked="{Binding Check}" IsCheckedChanged="ToggleButton_OnIsCheckedChanged"></CheckBox>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <Button Command="{Binding AddNewRow}" Content="Add new row"/>
    <ComboBox Name="checksize" ItemsSource="{Binding FontSize}" SelectedItem="{Binding CurrentFontSize}"/>
    <TextBox Name="findid" Text="{Binding FindId, Mode=TwoWay}"/>
    <CheckBox Name="select" IsChecked="{Binding Select}" Command="{Binding SelectAll}"/>
    
</StackPanel>

Это моя модель:

private string _text;
    private int _id;
    private float _fontsize;
    private bool _check;



    public int Id
    {
        get => _id;
        set => this.RaiseAndSetIfChanged(ref _id, value);
    }
    
    public bool Check
    {
        get => _check;
        set => this.RaiseAndSetIfChanged(ref _check, value);
    }

    public string Text
    {
        get => _text;
        set => this.RaiseAndSetIfChanged(ref _text, value);
    }
    public float FontSize
    {
        get => _fontsize;
        set => this.RaiseAndSetIfChanged(ref _fontsize, value);
    }

Это моя VM:

public class MainWindowViewModel : ViewModelBase
{
    private ObservableCollection<Test> _testlist;

    public ObservableCollection<Test> TestList
    {
        get => _testlist;
        set => this.RaiseAndSetIfChanged(ref _testlist, value);
    }

    public ReactiveCommand<Unit, Unit> AddNewRow { get; } // команда для доабвления новой пустой ячейки
    public ReactiveCommand<Unit, Unit> SelectAll { get; } // команда для доабвления новой пустой ячейки
    private bool? _select = false;
    public bool? Select
    {
        get => _select;
        set => this.RaiseAndSetIfChanged(ref _select, value);
    }

    private float _currentfontSize = 20;
    private int id;

    public float CurrentFontSize
    {
        get => _currentfontSize;
        set
        {
            bool flag = false;
            for (int i = 0; i < TestList.Count; i++)
            {
                if (TestList[i].Check)
                {
                    flag = true;
                    TestList[i].FontSize = value;
                }
            }

            if (flag) return;
            this.RaiseAndSetIfChanged(ref _currentfontSize, value);
            TestList[FindId].FontSize = CurrentFontSize;
        }
    }

    public List<float> FontSize { get; set; }

    public int _findId;

    public int FindId
    {
        get => _findId;
        set => this.RaiseAndSetIfChanged(ref _findId, value);
    }

    public MainWindowViewModel()
    {
        FontSize = new List<float>();
        for (float i = 5; i < 10; i += 0.2F)
        {
            FontSize.Add(new List<float> { (float)Math.Round(i, 1) });
        }
        for (float i = 10; i < 73; i++)
        {
            FontSize.Add(new List<float> { (float)Math.Round(i, 1) });
        }
        TestList = new ObservableCollection<Test>(new List<Test>());

        AddNewRow = ReactiveCommand.Create(() =>
        {
            TestList.Add(new ObservableCollection<Test>
            {
                new Test { Id = TestList.Count, Text = "test", FontSize = 20, Check = false }
            });
        });
        bool flag = false;
        SelectAll = ReactiveCommand.Create((() =>
        {
            if (flag == false)
            {
                for (int i = 0; i < TestList.Count; i++)
                {
                    TestList[i].Check = true;
                    Select = true;
                }
                flag = true;
            }
            else
            {
                for (int i = 0; i < TestList.Count; i++)
                {
                    TestList[i].Check = false;
                    Select = false;
                }
                flag = false;
            }
        }));

    }

И Events:

private int id;
    private void InputElement_OnPointerReleased(object? sender, PointerReleasedEventArgs e)
    {
        TextBox tb = sender as TextBox;
        id = (int)tb.Tag;
        findid.Text = id.ToString();
        if (select.IsChecked == null)
        {
            return;
        }
        checksize.SelectedItem = (float)Math.Round(tb.FontSize, 1);
        
    }

    private void ToggleButton_OnIsCheckedChanged(object? sender, RoutedEventArgs e)
    {
        CheckBox chb = sender as CheckBox;
        select.IsChecked = select.IsChecked;
    }

На данном этапе работает если по менять шрифт только у одного элемента, если же я выбираю несколько элементов через чекбокс и после изменения шрифта просто нажимаю на другой элемент то подставляется шрифт который принадлежит выбранному элементу. Я думаю мне нужно привязаться как то к чекбоксу ThreeState и блокировать изменение если хоть один элемент выбран, но у меня не выходит. Шрифт выбираю через Combobox. Помогите пожалуйста.


Ответы (0 шт):