Привязка ресурса WPF не найдена (ошибка в выводе) - PullRequest
0 голосов
/ 22 октября 2018

Я пытаюсь передать данные в шейдер, который я написал в HLSL для обработки изображений WPF, которые мне нужно сделать.Из того, что я тестировал, шейдер работает, но привязка не работает.

    <Grid HorizontalAlignment="Center" VerticalAlignment="Center">
    <Image x:Name="SourceImage" HorizontalAlignment="Left"
           Source="{Binding InputImageSource, FallbackValue={StaticResource DefaultImage}, TargetNullValue={StaticResource DefaultImage}, Mode=TwoWay, 
        RelativeSource={RelativeSource FindAncestor, 
        AncestorType={x:Type imagePreview:ImagePreview}}}"/>
    <Rectangle HorizontalAlignment="Left" Width="{Binding Value, ElementName=Slider}" 
               Margin="{Binding Margin, ElementName=SourceImage}">
        <Rectangle.Effect>
            <shader:ImageProcessor Brightness="{Binding BrightnessSlider, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type imagePreview:SettingsBar}}}"
                                   Gamma="{Binding GammaSlider, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type imagePreview:SettingsBar}}}"
                                   MultiplyColor="{Binding MultiplyColor.Value, Converter={StaticResource HexToColor}, Mode=OneWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type imagePreview:SettingsBar}}}"></shader:ImageProcessor>
        </Rectangle.Effect>

        <Rectangle.Fill>
            <ImageBrush ImageSource="{Binding OutImageSource, FallbackValue={StaticResource DefaultImage}, TargetNullValue={StaticResource DefaultImage}, 
                RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type imagePreview:ImagePreview}}}"
                        Stretch="UniformToFill" AlignmentX="Left" AlignmentY="Top">
            </ImageBrush>
        </Rectangle.Fill>
    </Rectangle>
    <Slider x:Name="Slider" Maximum="{Binding ActualWidth, ElementName=SourceImage}"
            Value="{Binding ActualWidth, ConverterParameter=0.5, Converter={converters:PercentageOfImage},
        ElementName=SourceImage, Mode=OneWay}"
            VerticalAlignment="Bottom" Margin="{Binding Margin, ElementName=SourceImage}"/>
</Grid>

А вот пользовательский контроль для настроек

**    <Border BorderBrush="{StaticResource 4DGrey1}" BorderThickness="5, 0, 0, 0" Margin="0, 0, 0, 10">
    <StackPanel>

        <Expander Header="IMPORT / EXPORT" Style="{StaticResource MontserratSemiBold}" Width="200" IsExpanded="True" x:Name="ImportExport">
            <StackPanel Style="{StaticResource MontserratRegular}">
                <TextBlock Text="- Select input / output folder" Margin="15,5,0,0" Style="{StaticResource MontserratExtraLight}"/>
                <StackPanel Orientation="Horizontal" Margin="10,5,10,0">
                    <Button Margin="5,0,0,0" Click="Button_Import">
                        <Image Source="../Resources/Images/Icons/folder-15.png" Width="70" Height="Auto" x:Name="ButtonImport"/>
                    </Button>
                    <Button Margin="20, 0, 0, 0" Style="{StaticResource MontserratLight}" Click="Button_Export">
                        <Image Source="../Resources/Images/Icons/folder-16.png" Width="70" Height="Auto"/>
                    </Button>
                </StackPanel>
            </StackPanel>
        </Expander>


        <Expander Header="ADJUSTMENT" Style="{StaticResource MontserratMedium}" Width="{Binding Width, ElementName=ImportExport}" IsExpanded="True">
            <StackPanel>
                <TextBlock Text="- Brightness" Margin="15,5,0,0" Style="{StaticResource MontserratExtraLight}"/>
                <Slider Margin="25,0,5,0" Minimum=".5" Maximum="5"
                                Value="{Binding BrightnessSlider, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:SettingsBar}}}"/>
                <TextBlock Text="- Gamma" Margin="15,5,0,0" Style="{StaticResource MontserratExtraLight}"/>
                <Slider Margin="25,0,5,0" Minimum="0" Maximum="2"
                                Value="{Binding GammaSlider, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:SettingsBar}}}"/>
                <TextBlock Text="- Greyscale type | Equalize" Margin="15,5,0,0" Style="{StaticResource MontserratExtraLight}"/>
                <StackPanel Orientation="Horizontal">

                    <ComboBox x:Name="GrayConversionSelector" ItemsSource="{StaticResource GreyscaleFormats}" Margin="15,5,0,0" Style="{StaticResource MontserratExtraLight}" DropDownClosed="Greytype_Update"
                  SelectedIndex="2"/>
                    <CheckBox HorizontalAlignment="Center" Margin="7,5,10,0" VerticalAlignment="Center" IsChecked="{Binding EqualizeToggle, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:SettingsBar}}}"/>

                </StackPanel>
                <TextBlock Text="- Color section tool" Margin="15,5,0,0" Style="{StaticResource MontserratExtraLight}"/>
                <xctk:DropDownButton Margin="15, 5, 10, 0"  Style="{StaticResource MontserratLight}" Background="{StaticResource 4DWhite}">
                    <xctk:DropDownButton.DropDownContent>
                        <xctk:ColorCanvas x:Name="ColorCanvas" SelectedColorChanged="Color_Changed"
                                                  SelectedColor="{Binding MultiplyColor, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:SettingsBar}}}"/>
                    </xctk:DropDownButton.DropDownContent>
                    <Border BorderThickness="1" BorderBrush="{StaticResource 4DGrey2}">
                        <Rectangle Height="19" Width="132">
                            <Rectangle.Fill>
                                <SolidColorBrush Color="{Binding SelectedColor, ElementName=ColorCanvas, FallbackValue={StaticResource 4DWhite}}"/>
                            </Rectangle.Fill>
                        </Rectangle>
                    </Border>
                </xctk:DropDownButton>
                <Button Content="Reset settings" Margin="15, 10, 10, 0" Style="{StaticResource MontserratLight}" Height="25" Click="Button_Reset"/>
                <Slider Margin="25,5,5,0" Minimum="0" Maximum="255"
                    Value="{Binding BlackControl, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:SettingsBar}}}"/>
                <Slider Margin="25,5,5,0" Minimum="0" Maximum="255"
                    Value="{Binding WhiteControl, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:SettingsBar}}}"/>
            </StackPanel>
        </Expander>

    </StackPanel>
</Border>**

Это то, что я использую для привязкии был добавлен в параметры шейдера через окно свойств.Однако ошибка, которую я получаю, выглядит следующим образом:

System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='FabricDigitizationTool.UserControls.SettingsBar', AncestorLevel='1''. BindingExpression:Path=MultiplyColor; DataItem=null; target element is 'ColorCanvas' (Name='ColorCanvas'); target property is 'SelectedColor' (type 'Nullable`1')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='FabricDigitizationTool.UserControls.SettingsBar', AncestorLevel='1''. BindingExpression:Path=BrightnessSlider; DataItem=null; target element is 'ImageProcessor' (HashCode=22367029); target property is 'Brightness' (type 'Double')
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'RelativeSource FindAncestor, AncestorType='FabricDigitizationTool.UserControls.SettingsBar', AncestorLevel='1''. BindingExpression:Path=MultiplyColor.Value; DataItem=null; target element is 'ImageProcessor' (HashCode=22367029); target property is 'MultiplyColor' (type 'Color')

Я получаю несколько из них, один для цвета и несколько двойных, которые, как я предполагаю, имеют ту же проблему.Элемент ColorCanvas определяется как

<xctk:ColorCanvas x:Name="ColorCanvas" SelectedColorChanged="Color_Changed"
                                                  SelectedColor="{Binding MultiplyColor, Mode=TwoWay, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:SettingsBar}}}"/>

Все это работало до того, как я делал это с шейдером, но теперь все сломано.Всякий раз, когда параметр в моей панели настроек обновляется, он запускает событие, которое обновляет данные (используя зависимые свойства), и это событие запускает повторную обработку выходного изображения.Я изменил это на шейдер с некоторыми параметрами, но это не хочет работать.

Значения параметров шейдера равны 1, 1 и 0xFFFFFF соответственно.

Если у кого-то есть идея или требуется дополнительная информация, любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...