Установить флажок стиля шаблона метки программно WPF - PullRequest
0 голосов
/ 21 октября 2019

Я создал стиль для флажка в WPF и программно создал массив этих флажков. Стиль выглядит следующим образом:

<Style x:Key="deviceZoom" TargetType="{x:Type CheckBox}">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <DockPanel x:Name="dockPanel">
                    <Canvas Width="24.15" Height="23">
                        <Image Source="/Resources/Icons/deviceUnselectedDiscrete.png" x:Name="DeviceImage" Width="12" Height="19" Canvas.Top="4"/>
                        <Border x:Name="borderDevice"
                                        CornerRadius="5"
                                        Width="20"
                                        Height="10"
                                        Background="#222528"
                                        BorderThickness="0"
                                        Canvas.Top="1"
                                        Canvas.Left="4.15">
                            <TextBlock x:Name="numBoards"  HorizontalAlignment="Center" VerticalAlignment="Center" Padding=".1" FontSize="8" Foreground="White" Text="99"/>                                     
                        </Border>
                    </Canvas>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>    
</Style>

И затем я создаю несколько таких флажков и добавляю к корневому холсту

    Style style = canvas.FindResource("deviceZoom") as Style;

    var deviceCheckbox = new CheckBox();
    canvas.Children.Add(deviceCheckbox);
    deviceCheckbox.Style = style;
    //Here I would like to set the label text

Теперь я хотел бы установить из кода за значением значениеОбозначайте numBoards каждый раз, когда у меня появляются новые данные, но я не знаю как. Я пытался использовать динамические свойства, но не смог их правильно настроить, поскольку флажок создан программно, и попытался с привязкой, но безуспешно

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

CheckBox имеет свойство Content. Привязка TextBlock.Text в шаблоне к владельцу Контента через TemplateBinding.

<Style x:Key="deviceZoom" TargetType="{x:Type CheckBox}">
    <Setter Property="Template" >
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type CheckBox}">
                <DockPanel x:Name="dockPanel">
                    <Canvas Width="24.15" Height="23">
                        <Image Source="/Resources/Icons/deviceUnselectedDiscrete.png" x:Name="DeviceImage" Width="12" Height="19" Canvas.Top="4"/>
                        <Border x:Name="borderDevice"
                                        CornerRadius="5"
                                        Width="20"
                                        Height="10"
                                        Background="#222528"
                                        BorderThickness="0"
                                        Canvas.Top="1"
                                        Canvas.Left="4.15">
                            <TextBlock x:Name="numBoards"
                                       HorizontalAlignment="Center" VerticalAlignment="Center" 
                                       Padding=".1" FontSize="8" Foreground="White"
                                       Text="{TemplateBinding Content}"/>                                     
                        </Border>
                    </Canvas>
                </DockPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>    
</Style>

Затем вы можете назначить Контент, и он будет отображаться в TextBlock:

deviceCheckbox.Content = "I am deviceCheckbox";
0 голосов
/ 21 октября 2019

сначала добавьте UserControl. и добавить новое свойство. это связывает numBoards. XAML - это ..

<UserControl x:Class="yourproject.myCheckBox"
            xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
            xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
            xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
            xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
            xmlns:local="clr-namespace:yourproject"
            mc:Ignorable="d" x:Name="rootCtrl"
            d:DesignHeight="450" d:DesignWidth="800">
    <Canvas>
        <CheckBox DataContext="{Binding ElementName=rootCtrl}" >
            <CheckBox.Template>
                <ControlTemplate TargetType="{x:Type CheckBox}">
                    <DockPanel x:Name="dockPanel">
                        <Canvas Width="24.15" Height="23">
                            <Image Source="/Resources/Icons/deviceUnselectedDiscrete.png" x:Name="DeviceImage" Width="12" Height="19" Canvas.Top="4"/>
                            <Border x:Name="borderDevice"
                                        CornerRadius="5"
                                        Width="20"
                                        Height="10"
                                        Background="#222528"
                                        BorderThickness="0"
                                        Canvas.Top="1"
                                        Canvas.Left="4.15">
                                <TextBlock x:Name="numBoards"  HorizontalAlignment="Center" VerticalAlignment="Center" Padding=".1" FontSize="8" Foreground="White" Text="{Binding NumBoards}"/>
                            </Border>
                        </Canvas>
                    </DockPanel>
                </ControlTemplate>
            </CheckBox.Template>
        </CheckBox>
    </Canvas>
</UserControl>

Код: ..

public partial class myCheckBox : UserControl, INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
    protected void OnPropertyChanged(string propertyName)
    {
        this.OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
    }

    protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
    {
        var handler = this.PropertyChanged;
        if (handler != null)
        {
            handler(this, e);
        }
    }

    private string _NumBoards = "77";
    public string NumBoards
    {
        get
        {
            return _NumBoards;
        }
        set
        {
            _NumBoards = value;
            OnPropertyChanged("NumBoards");
        }
    }
    public myCheckBox()
    {
        InitializeComponent();
    }
}

и использование элемента управления myCheckBox

var deviceCheckbox = new myCheckBox();
deviceCheckbox.NumBoards = "20";
canvas.Children.Add(deviceCheckbox);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...