Ошибка шаблонов WPF - «Предоставить значение для« System.Windows.Baml2006.TypeConverterMarkupExtension »вызвала исключение». - PullRequest
16 голосов
/ 08 марта 2010

Я только начал экспериментировать с шаблонами 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>

Что я делаю не так?

Ответы [ 11 ]

12 голосов
/ 08 марта 2010

Ой, понедельник ...

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

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

По-прежнему паршивое сообщение об ошибке.

6 голосов
/ 05 июля 2011

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

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

Обратите внимание, что я не заполнил значение высоты ..

4 голосов
/ 07 декабря 2010

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

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

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

3 голосов
/ 22 апреля 2011

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

3 голосов
/ 09 марта 2011

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

        <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; компонент в моем случае.

1 голос
/ 25 июня 2014

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

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

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

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

1 голос
/ 19 октября 2013

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

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

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

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

0 голосов
/ 28 июня 2015

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

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

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

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

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

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

0 голосов
/ 14 января 2014

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

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

вместо

<Setter Property="BorderBrush" Value="Gray"/>
0 голосов
/ 31 июля 2013

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

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

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

...