用于图像效果的控件模板中的WPF绑定错误

时间:2011-04-11 02:29:47

标签: .net wpf binding effects

我需要一些帮助来解决我从自定义按钮上的样式获得的绑定错误。 这是xaml:

<Style TargetType="{x:Type Controls:DropDownButton}" BasedOn="{StaticResource ButtonBaseStyle}">
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Controls:DropDownButton}">
                        <Border
                            x:Name="border"
                            Padding="{TemplateBinding Padding}"
                            HorizontalAlignment="{TemplateBinding HorizontalAlignment}"
                            VerticalAlignment="{TemplateBinding VerticalAlignment}">
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="Auto"/>
                                </Grid.ColumnDefinitions>

                                <Grid Grid.Column="0" >
                                    <Border Padding="5">
                                        <Grid>
                                            <Grid.RowDefinitions>
                                                <RowDefinition Height="*"/>
                                                <RowDefinition Height="*"/>
                                            </Grid.RowDefinitions>

                                            <Grid Grid.Row="0">
                                                <Image 
                                                    Style="{StaticResource DefaultImageStyle}" 
                                                    Source="{Binding SmallImage, Converter={StaticResource LocalizingConverter}}">
                                                    <Image.Effect>
                                                        <ShaderEffects:GrayscaleEffect 
                                                            DesaturationFactor="1" 
                                                            IsEnabled="{Binding IsEnabled, RelativeSource={RelativeSource TemplatedParent}}"/>
                                                    </Image.Effect>
                                                </Image>
                                            </Grid>
                                            <Grid Grid.Row="1">
                                                <TextBlock 
                                                    Style="{StaticResource DefaultTextHeaderStyle}" 
                                                    Text="{Binding Name, Converter={StaticResource LocalizingConverter}}"/>
                                            </Grid>
                                        </Grid>
                                    </Border>
                                </Grid>
                                <Grid 
                                    Grid.Column="1"
                                    VerticalAlignment="Stretch">
                                    <Polygon                                                                    
                                        x:Name="arrow"
                                        Points="0,0 8,0 4,5"                                                                                                                                              
                                        Fill="{TemplateBinding Foreground}"
                                        VerticalAlignment="Center"
                                        HorizontalAlignment="Center"/>
                                </Grid>
                            </Grid>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>

当应用程序启动时会出现以下绑定错误:

  

System.Windows.Data错误:2:不能   找到管理FrameworkElement或   Target的FrameworkContentElement   元件。   BindingExpression:路径=的IsEnabled;   的DataItem = NULL;目标元素是   'GrayscaleEffect'(HashCode = 4769001);   target属性是'IsEnabled'(类型   '布尔')

图像效果似乎工作正常,但最新处理绑定错误以及如何解决?

1 个答案:

答案 0 :(得分:1)

我认为Effect实际上没有DataContext,因为它不从FrameworkContentElement继承,所以它无法通过继承的DataContext找到模板化的父级。我在Camera对象中看到了同样的东西,它也没有得到DataContext。请查看:http://msdn.microsoft.com/en-us/library/system.windows.media.effects.effect.aspx

IsEnabled部分是否适合您?