WPF模板错误 - “在'System.Windows.Baml2006.TypeConverterMarkupExtension'上提供值引发异常。”

时间:2010-03-08 16:43:28

标签: wpf templates visual-studio-2010 binding

我刚刚开始尝试使用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>

我做错了什么?

12 个答案:

答案 0 :(得分:12)

是的,星期一......

当我复制粘贴来自另一个控件的颜色字符串时,它在前缀中添加了两个“##”:

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

仍然是一个糟糕的错误消息。

答案 1 :(得分:6)

与其他人类似 - 这个可怕的错误消息只是意味着我的xaml中出现语法错误:

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

注意我没有填写高度值..

答案 2 :(得分:4)

我遇到了同样的错误:

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

通过在BorderThickness中添加数字来修复

答案 3 :(得分:3)

就我而言,我更改了项目名称。我收到此错误后。我重新选择了图像,发现我还需要更改图像的资源名称。

        <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;在我的情况下是组件。

答案 4 :(得分:3)

在Grid上分配Width =“*”给了我错误,这在第一次看起来很奇怪,但是它试图说的是标记无法转换为实际类型。

答案 5 :(得分:1)

与其他人不同,我的XAML语法正确。

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

当我更改图像时,此错误开始显示 - 后来意识到我确实更改了文件夹中的图像,但忘记在项目中包含

因此,虽然XAML可以在'Desgn'视图中向我展示图像 - 但我遇到了@运行时的异常。 愚蠢的。

答案 6 :(得分:1)

以下是此错误的另一个实例以及我如何解决它。

这似乎是由于我的项目从VS2010升级到VS2012和VS2013造成的。不确定为什么这会是一个问题,但我想是的。

我开发了一个Visual Studio向导来自动化将项目添加到我们非常大的解决方案(300多个项目)的过程,因为我们的开发人员有额外的要求来帮助维护项目。我使用WPF作为向导,这对VS2010很有用。我将项目升级到VS2012和VS2013,我开始收到此错误。事实证明,在某些时候,我的图标和图像文件的路径被搞砸了。一旦我纠正了它 - 我在XAML中直接做了 - 我就不再收到错误了。

如果您可能需要帮助引用资源 - 这是我用来纠正问题的帖子:How to reference an icon resource file reference in XAML

答案 7 :(得分:0)

当我忘记大括号时,我也有同样的想法:

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

答案 8 :(得分:0)

我的任务是修复一个无限期显示类似错误消息的错误。当我发现以下问题引起了这个问题时,我有点失望(期待更复杂和灾难性的事情!):

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

LinkBut​​ton 应该是 LinkBut​​tonStyle

答案 9 :(得分:0)

在BorderBrush

中使用Gray而不是Gray时,我遇到了同样的错误
<Setter Property="BorderBrush" Value="Grey"/>

而不是

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

答案 10 :(得分:0)

我遇到了同样的错误,但是在资源文件夹中使用了错误的路径

我有这个......

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

但我需要这个......

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

首先要添加../,先退回一个文件夹

答案 11 :(得分:0)

在此代码中使用“OutBox”时,我遇到了同样的错误:

                      <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <materialDesign:PackIcon Kind="OutBox" Width="25" Height="25" VerticalAlignment="Center" Margin="5" Foreground="DodgerBlue"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>

OutBox 是未知值,因此更改为“StopCircle”然后修复...