代码之家  ›  专栏  ›  技术社区  ›  jasonk

WPF模板错误-“在“system.windows.baml2006.typeconvertermarkupextension”上提供值时引发异常。”

  •  16
  • jasonk  · 技术社区  · 16 年前

    我刚刚开始尝试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 回复  |  直到 11 年前
        1
  •  12
  •   jasonk    16 年前

    今天是星期一…

    当我从另一个控件复制粘贴颜色字符串时,它在前缀中放了两个“35;”在这里:

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

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

        2
  •  6
  •   DefenestrationDay Tom Jefferys    15 年前

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

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

    注意我没有填写高度值。

        3
  •  4
  •   Collin O'Connor    15 年前

    我犯了同样的错误,原因是:

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

    通过在边距中输入一个数字来固定

        4
  •  3
  •   Nasenbaer    15 年前

    在我的例子中,我更改了项目名称。在我犯了这个错误之后。我重新选择了图片,看到我也需要更改图片的资源名称。

            <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
  •  3
  •   skjagini    15 年前

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

        6
  •  1
  •   B Bhatnagar    12 年前

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

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

    当我更改图像时,这个错误开始出现-后来意识到我确实更改了文件夹中的图像,但忘记了 包括 在我的项目里。

    因此,尽管xaml可以在“desgn”视图中显示图像,但在运行时我遇到了这个异常。 愚蠢的人。

        7
  •  1
  •   Community Mohan Dere    9 年前

    这是这个错误的另一个例子,以及我是如何解决它的。

    这似乎是由于将我的项目从vs2010升级到vs2012和vs2013所致。我不知道这到底是为什么,但我想是的。

    我开发了一个visual studio向导来自动将项目添加到我们非常大的解决方案(300多个项目)中,因为我们的开发人员需要帮助维护项目。我在向导中使用了wpf,这在vs2010中很有效。我将项目升级到vs2012和vs2013,并开始出现此错误。结果在某个时候我的图标和图像文件的路径被搞砸了。一旦我纠正了它-我直接在xaml中做了-我就不再得到错误。

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

        8
  •  0
  •   Vasyl Boroviak    14 年前

    当我忘记了花括号的时候,我也一样:

    <DataTrigger Binding="{Binding Path=IsWhiteboardShared}" Value="True">
        <Setter Property="Background" Value="StaticResource AccentColorBlueBrush"/>
    </DataTrigger>
    
        9
  •  0
  •   Stephen C    13 年前

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

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

    哪里 链接按钮 应该是 链接按钮样式 .

        10
  •  0
  •   Tejo    12 年前

    我在画笔上用灰色代替灰色时也犯了同样的错误

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

    而不是

    <Setter Property="BorderBrush" Value="Gray"/>
    
        11
  •  0
  •   James    11 年前

    我也有同样的错误,但是在资源文件夹中使用了错误的图像路径

    我有这个…

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

    但我需要这个…

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

    必须在开始时添加../才能先返回一个文件夹