Ioa*_*cur 13 wpf warnings datatemplate
当绑定到DataTemplate内的 SolidColorBrush属性时,我在Visual Studio输出窗口中收到此警告:
System.Windows.Data错误:2:找不到目标元素的管理FrameworkElement或FrameworkContentElement.BindingExpression:路径= MyColor; 的DataItem = NULL; target元素是'SolidColorBrush'(HashCode = 22943289); 目标属性是'颜色'(类型'颜色')
如果我直接绑定在DataTemplate外部的矩形元素上,那么一切都很好.
任何人都可以从下面的示例代码中解释为什么这两个明显相似的用法存在差异:
我的看法:
<UserControl.Resources>
<vm:TestViewModel x:Key="_myTestVM"/>
<DataTemplate x:Key="testVMDataTemplate">
<Grid>
<Rectangle Height="30" Width="200" Margin="5">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Path=MyColor}" />
</Rectangle.Fill>
</Rectangle>
</Grid>
</DataTemplate>
</UserControl.Resources>
<Grid>
<StackPanel DataContext="{StaticResource _myTestVM}">
<!-- Binding *outside* the DataTemplate = works fine -->
<Rectangle Height="30" Width="200" Margin="5">
<Rectangle.Fill>
<SolidColorBrush Color="{Binding Path=MyColor}"/>
</Rectangle.Fill>
</Rectangle>
<!-- Binding *inside* the DataTemplate = output warning -->
<ContentControl Content="{Binding}" ContentTemplate="{StaticResource testVMDataTemplate}"/>
</StackPanel>
</Grid>
Run Code Online (Sandbox Code Playgroud)
我的ViewModel(TestViewModel):
public class TestViewModel {
private Color _color = Colors.Green;
public Color MyColor {
get { return _color; }
}
public TestViewModel() {
}
}
Run Code Online (Sandbox Code Playgroud)
更新:
它显然与绑定SolidColorBrush的Color属性有关.如果我在RotateTransform对象上绑定Angle属性,则会发生同样的事情.
提前致谢.
WPF*_*-it 11
与默认数据源绑定不适DataContext用于SolidColorBrush类型,因为它们不是框架元素.此外,它们是可冻结的,您不能通过基于数据上下文的颜色绑定动态更改颜色.
您必须通过将颜色转换为纯色画笔的转换器将颜色绑定到背景填充.
<TextBlock Background="{Binding MyColor,
Converter={StaticResource ColorToBrushConverter}}" />
Run Code Online (Sandbox Code Playgroud)
或者使用Color as DynamicResource并在Solid Color Brush中引用它.
ControlTemplate Storyboard颜色动画问题
| 归档时间: |
|
| 查看次数: |
9916 次 |
| 最近记录: |