Составные элементы управления WPF

Как часто вы собираетесь это делать; если вы действительно хотите массив, вы должны использовать массив . В противном случае, да, функция, которая создает новый список, состоящий из копии первых N элементов, нового элемента и хвоста, будет в порядке. Я не знаю, какая встроенная функция у меня в голове, но я давно не программировал на Лиспе.

Вот решение в Схеме (потому что я знаю это лучше, чем Common Lisp, и у меня есть переводчик для проверки моей работы):

(define (replace-nth list n elem)
  (cond
    ((null? list) ())
    ((eq? n 0) (cons elem (cdr list)))
    (#t (cons (car list) (replace-nth (cdr list) (- n 1) elem)))))

6
задан Jake Pearson 18 June 2009 в 18:44
поделиться

2 ответа

Связывание действительно подходит:

XAML:

<UserControl x:Class="testapp.LabelTextBox "
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="300" Width="300" x:Name="This">
<DockPanel>
    <TextBlock DockPanel.Dock="Left" TextAlignment="Right" Width="70" Name="label" Text="{Binding Label, ElementName=This}"  />
    <TextBlock Text=": " DockPanel.Dock="Left" />
    <TextBox Name="textBox" Text="{Binding Text, ElementName=This}" />
</DockPanel>

Отложенный код:

    public partial class LabelTextBox : UserControl
{
    public LabelTextBox()
    {
        InitializeComponent();
        Label = "Label";
        Text = "Text";
    }
    public static readonly DependencyProperty LabelProperty = DependencyProperty.Register("Label", typeof(string), typeof(LabelTextBox), new FrameworkPropertyMetadata(LabelPropertyChangedCallback));
    private static void LabelPropertyChangedCallback(DependencyObject controlInstance, DependencyPropertyChangedEventArgs args)
    {
    }
    public string Label
    {
        get { return (string) GetValue(LabelProperty); }
        set { SetValue(LabelProperty, value); }
    }

    public static readonly DependencyProperty TextProperty = DependencyProperty.Register("Text", typeof(string), typeof(LabelTextBox), new FrameworkPropertyMetadata(TextPropertyChangedCallback));
    private static void TextPropertyChangedCallback(DependencyObject controlInstance, DependencyPropertyChangedEventArgs args)
    {
    }
    public string Text
    {
        get { return (string) GetValue(TextProperty); }
        set { SetValue(LabelTextBox.TextProperty, value); }
    }
}
6
ответ дан 17 December 2019 в 00:13
поделиться

Я не разбирался, почему ваша реализация не работает, но я действительно не понимаю, почему вы делаете это именно так. Почему бы просто не определить необходимые свойства зависимостей в UserControl, а затем привязать к ним?

public static readonly DependencyProperty LabelTextProperty = ...;

А затем в вашем XAML:

<Label Content="{Binding LabelText}"/>
1
ответ дан 17 December 2019 в 00:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: