Ошибка привязки WPF в шаблоне управления для Image Effect - PullRequest
1 голос
/ 11 апреля 2011

Мне нужна помощь с ошибкой привязки, которую я получаю из стиля пользовательской кнопки. Вот этот 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 или FrameworkContentElement для цели элемент. BindingExpression: Path = IsEnabled; DataItem = NULL; целевой элемент 'GrayscaleEffect' (HashCode = 4769001); Свойство target - IsEnabled (тип 'Boolean')

Эффект изображения, кажется, работает нормально, но что за ошибка с привязкой и как ее исправить?

1 Ответ

1 голос
/ 11 апреля 2011

Я не думаю, что Effect действительно имеет DataContext, потому что он не наследуется от FrameworkContentElement, поэтому он не может найти шаблонного родителя через унаследованный DataContext. Я видел то же самое с объектом Camera, который также не получает DataContext. Проверьте это на: http://msdn.microsoft.com/en-us/library/system.windows.media.effects.effect.aspx

Правильно ли работает часть IsEnabled для вас?

...