【发布时间】:2015-07-27 06:58:02
【问题描述】:
目的
该控件的目的是以 6x2 网格的形式显示 12 个按钮。单击按钮应将 VM 的 ActiveLayer 属性设置为单击按钮的索引(1 到 12)。 UserControl 应该通过将按钮的 Background 更改为 SkyBlue 来突出显示当前层。
步骤
以下是我采取的步骤:
- 在我的用户控件中添加了一个名为
ActiveLayer的DependencyProperty。这个依赖属性的PropertyChangedCallBack更新按钮的Background(见底部)。 -
在 XAML 中添加了一个
Grid(6 列,2 行)和 12 个Button控件。 Button 的Tag属性设置为其索引,即 1 到 12。所有按钮都附加到同一个事件处理程序Button_Click,它具有以下简单主体:SetValue(ActiveLayerProperty, CInt(DirectCast(sender, Button).Tag)) -
在使用 UserControl 的窗口中,我有以下 XAML:
<local:LayerSelector ActiveLayer="{Binding ActiveDrawing.ActiveLayer}" />
这里是PropertyChangedCallBack 处理程序:
Sub(sender As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim Ctl = DirectCast(sender, LayerSelector)
Dim WH = New SolidColorBrush(System.Windows.Media.Colors.White)
For i = 0 To 11
DirectCast(Ctl.FindName("btn" + i.ToString()), Button).Background = WH
Next
DirectCast(Ctl.FindName("btn" + e.NewValue.ToString()), Button).Background = New SolidColorBrush(System.Windows.Media.Colors.SkyBlue)
End Sub
问题
上述设置似乎不会更改我的 VM 的 ActiveLayer 属性。 Button Background 和 UserControl 的 ActiveLayer 属性似乎已更新。我做错了什么?
【问题讨论】:
标签: wpf vb.net xaml user-controls dependency-properties