我一直在尝试使用 Lightswitch 并尝试添加自定义控件,但是所有示例和我的测试都表明数据绑定有问题。
例如,我有一个颜色表,其成员名为:
string ColorName; // Name of colour
string ColorHex; // #Html Color string
我有一个简单的自定义控件,可以将其中一种颜色显示为带有其名称的小样本。
<UserControl
xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk"
x:Class="LightSwitch.UserControls.HtmlColorControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:Vero.LightSwitch.UserControls"
mc:Ignorable="d"
d:DesignHeight="30" d:DesignWidth="400">
<UserControl.Resources>
<local:ColorToSolidColorBrushValueConverter x:Key="ColorToSolidColorBrushConverter"/>
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="#FF28DFE8" MinWidth="100">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="30"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<Rectangle Fill="{Binding Path=Screen.SelectedColor.ColorHex, Converter={StaticResource ColorToSolidColorBrushConverter}}" Margin="3" />
<TextBox Text="{Binding Path=Screen.SelectedColor.ColorName}" Grid.Column="1" />
</Grid>
</UserControl>
作为测试,我向屏幕添加了 SelectedColor 属性,然后添加了自定义控件,并将其数据上下文设置为 SelectedColor。
您会期望控件中的绑定只需要是"ColorName"
and "ColorHex"
,但是绑定的实际数据上下文似乎是层次结构更高的东西(在屏幕上方),您需要有一个类似的路径"Screen.SelectedColor.ColorHex"
。分配给自定义控件的数据上下文值似乎被完全忽略了。
我究竟做错了什么?在自定义控件中拥有完整的绑定路径是没有意义的,因为它们不应该知道数据来自哪里(只有上下文中有特定成员)。