Silverlight - привязка для контроля пограничной толщины - PullRequest
3 голосов
/ 14 декабря 2009

Я пытаюсь лучше понять механизм привязки Silverlights и поэтому создал простую программу, которая будет изменять толщину списка при нажатии кнопки. Однако это не работает, и я не могу понять, что я делаю неправильно. Есть идеи?

XAML:

<Grid x:Name="LayoutRoot" Background="White">
    <ListBox Height="100" HorizontalAlignment="Left" Margin="134,102,0,0" Name="listBox1" VerticalAlignment="Top" Width="120" BorderThickness="{Binding TheThickness, Mode=TwoWay}" />
    <Button Content="Button" Height="23" HorizontalAlignment="Left" Margin="276,36,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
</Grid>

Код:

using System.ComponentModel;
using System.Windows;
using System.Windows.Controls;

namespace SilverlightApplication4
{
    public partial class MainPage : UserControl
    {
        private TestClass testInst = new TestClass(); 

        public MainPage()

    {
        InitializeComponent();
        listBox1.DataContext = testInst;
    }

    private void button1_Click(object sender, RoutedEventArgs e)
    {
        testInst.TheThickness = 10;
    }
}

public class TestClass
{
    private int theThickness = 5;

    public int TheThickness
    {
        get { return theThickness; }
        set
        {
            theThickness = value;

            NotifyPropertyChanged("TheThickness");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    // NotifyPropertyChanged will raise the PropertyChanged event, passing the source property that is being updated.
    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

}

1 Ответ

4 голосов
/ 14 декабря 2009

Толщина границы имеет тип Thickness, который имеет несколько значений для Top, Bottom, Left и Right. Парсер XAML знает, как правильно обрабатывать что-то вроде BorderThickness = "5", но в коде вам нужно использовать тип Thickness. Например: -

public Thickness SelectedThickness
{
    get { return (Thickness)GetValue(SelectedThicknessProperty); }
    set { SetValue(SelectedThicknessProperty, value); }
}

public static readonly DependencyProperty SelectedThicknessProperty =
    DependencyProperty.Register("SelectedThickness", typeof(Thickness), typeof(MyRectangle),
    new PropertyMetadata(new Thickness() { Top = 1, Bottom = 1, Left = 1, Right = 1 }));
}

В этом случае толщина по умолчанию равна 1.

Редактировать Код больше похож на ваш: -

    private Thickness theThickness = new Thickness() {Left = 5, Right = 5, Top = 5, Bottom = 5};

    public Thickness TheThickness
    {
        get { return theThickness; }
        set
        {
            theThickness = value;

            NotifyPropertyChanged("TheThickness");
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...