Ошибка шаблона WPF - "Предоставить значение в" System.Windows.Baml2006.TypeConverterMarkupExtension "выбрасывает исключение".

Я только начал экспериментировать с шаблонами WPF против стилей, и я не уверен, что я делаю неправильно. Цель ниже - чередовать цвета опций в меню. Код работает нормально только с помощью, но когда я копирую и вставляю/переименовываю его для второго сегмента "MenuChoiceOdd", я получаю следующую ошибку:

> Предоставить значение в 'System.Windows.Baml2006.TypeConverterMarkupExtension', сделало исключение.

Пример кода:

<Window x:Class="WpfApplication1.Template_Testing"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="Template_Testing" Height="300" Width="300">
    <Grid>
        <Grid.Resources>
            <ControlTemplate x:Key="MenuChoiceEven">
                <Border BorderThickness="1" BorderBrush="#FF4A5D80">
                <TextBlock Height="Auto" HorizontalAlignment="Stretch" Margin="0"  Width="Auto" FontSize="14" Foreground="SlateGray" TextAlignment="Left" AllowDrop="True" Text="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}">
                    <TextBlock.Background>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="White" Offset="0" />
                            <GradientStop Color="#FFC2CCDB" Offset="1" />
                        </LinearGradientBrush>
                    </TextBlock.Background>
                </TextBlock>
                </Border>
            </ControlTemplate>
            <ControlTemplate x:Key="MenuChoiceOdd">
                <Border BorderThickness="1" BorderBrush="#FF4A5D80">
                    <TextBlock Height="Auto" HorizontalAlignment="Stretch" Margin="0"  Width="Auto" FontSize="14" Foreground="SlateGray" TextAlignment="Left" AllowDrop="True" Text="{Binding Path=Content, RelativeSource={RelativeSource TemplatedParent}}">
                    <TextBlock.Background>
                        <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
                            <GradientStop Color="White" Offset="0" />
                            <GradientStop Color="##FFCBCBCB" Offset="1" />
                        </LinearGradientBrush>
                    </TextBlock.Background>
                    </TextBlock>
                </Border>
            </ControlTemplate>            
        </Grid.Resources>
        <Border BorderBrush="SlateGray" BorderThickness="2" Margin="10" CornerRadius="10" Background="LightSteelBlue" Width="200">
            <StackPanel Margin="4">
                <TextBlock Height="Auto" HorizontalAlignment="Stretch" Margin="2,2,2,0" Name="MenuHeaderTextBlock" Text="TextBlock" Width="Auto" FontSize="16" Foreground="PaleGoldenrod" TextAlignment="Left" Padding="10" FontWeight="Bold"><TextBlock.Background><LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"><GradientStop Color="LightSlateGray" Offset="0" /><GradientStop Color="DarkSlateGray" Offset="1" /></LinearGradientBrush></TextBlock.Background></TextBlock>
                <StackPanel Height="Auto" HorizontalAlignment="Stretch" Margin="2,0,2,0" Name="MenuChoicesStackPanel" VerticalAlignment="Top" Width="Auto">
                    <Button Template="{StaticResource MenuChoiceEven}" Content="Test Even menu element" />
                    <Button Template="{StaticResource MenuChoiceOdd}"  Content="Test odd menu element" />
                </StackPanel>
            </StackPanel>
        </Border>
    </Grid>
</Window>

Что я делаю неправильно?

Ответы

Ответ 1

В понедельник...

Когда я скопировал вставку строки цвета из другого элемента управления, она помещала здесь два "##" в префикс:

<GradientStop Color="##FFCBCBCB" Offset="1" />

Все еще отвратительное сообщение об ошибке.

Ответ 2

Подобно другим - это ужасное сообщение об ошибке просто означало, что у меня была синтаксическая ошибка в моем xaml:

<CheckBox Height="" IsChecked="{Binding IsChecked, Mode=TwoWay}"  Width="80">

Заметьте, что я не заполнил значение высоты.

Ответ 3

У меня была такая же ошибка, вызванная:

<Border Margin="5" BorderBrush="Black" BorderThickness="" Width="Auto"/>

фиксируется путем помещения числа в BorderThickness

Ответ 4

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

        <Image x:Name="imgSrc" Grid.Row="1" Source="/PREV%20-%20Filter;component/Images/Subtraktive%20Farbmischung%20%28Malen%20mit%20Wasserfarben%29.jpg" />

/PREV %20- %20Filter; компонент должен быть скорректирован на /DSP %20- %20Filter; компонент в моем случае.

Ответ 5

Назначение Width = "*" на Grid дало мне ошибку, которая выглядит странно в первый раз, но все, что она пытается сказать, заключается в том, что разметка не может быть преобразована в фактический тип.

Ответ 6

В отличие от других, у меня был правильный синтаксис XAML.

<ImageBrush ImageSource="..\Images\previous_icon.png" />          

Эта ошибка начала появляться, когда я сменил изображение - позже понял, что я изменил изображение в своей папке, но забыл Включить в мой проект.

Следовательно, хотя XAML может показать мне изображение в "Desgn" View - я столкнулся с этим исключением @время выполнения. Глупый.

Ответ 7

Вот еще один пример этой ошибки и как я ее разрешил.

Это, по-видимому, вызвано обновлением моего проекта от VS2010 до VS2012 и VS2013. Не уверен точно, почему это было бы проблемой здесь, но, я думаю, это так.

Я разработал мастер Visual Studio для автоматизации процесса добавления проекта в наше очень крупное решение (более 300 проектов), поскольку для поддержки проекта мы требуем дополнительных требований к поддержке проекта. Я использовал WPF для мастера и хорошо работал для VS2010. Я обновил проект до VS2012 и VS2013, и я начал получать эту ошибку. Оказывается, в какой-то момент путь к моим значкам и файлам изображений был прикручен. Как только я исправил это, что я сделал непосредственно в XAML, я перестала получать ошибку.

Если вам может понадобиться помощь, ссылающаяся на ресурсы - это сообщение, которое я использовал для исправления моих проблем: Как ссылаться на ссылку файла ресурса значка в XAML

Ответ 8

У меня было то же самое, когда я забыл фигурные скобки:

<DataTrigger Binding="{Binding Path=IsWhiteboardShared}" Value="True">
    <Setter Property="Background" Value="StaticResource AccentColorBlueBrush"/>
</DataTrigger>

Ответ 9

Мне было поручено исправить ошибку, когда подобное сообщение об ошибке показывалось бесконечно. Когда я узнал, что следующее вызвало эту проблему, я был немного разочарован (ожидал чего-то более сложного и катастрофического!):

<Style BasedOn="{StaticResource LinkButton}" TargetType="Button" >

где LinkButton должно быть LinkButtonStyle.

Ответ 10

У меня была такая же ошибка при использовании Gray вместо Gray в моей BorderBrush

<Setter Property="BorderBrush" Value="Grey"/>

вместо

<Setter Property="BorderBrush" Value="Gray"/>

Ответ 11

У меня была такая же ошибка, но я использовал неправильный путь для изображения в папке ресурсов

У меня было это...

<controls:ImageButton Grid.Column="2" ImageButtonSource="Resources/close_normal.png"/>

но мне это нужно...

<controls:ImageButton Grid.Column="2" ImageButtonSource="../Resources/close_normal.png"/>

Пришлось добавить../в начале, чтобы сначала вернуться к одной папке