Silverlight - 绑定控制borderthickness

时间:2009-12-14 11:21:19

标签: silverlight binding

我正在努力更好地了解Silverlight绑定机制,因此创建了一个简单的程序,只需按一下按钮就可以改变列表框的borderthickness。然而,它不起作用,我无法弄清楚我做错了什么。有什么想法吗?

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 个答案:

答案 0 :(得分:4)

边框粗细为Thickness类型,其顶部,底部,左侧和右侧有多个值。 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");
        }
    }