【问题标题】:WPF Templates error - "Provide value on 'System.Windows.Baml2006.TypeConverterMarkupExtension' threw an exception."WPF 模板错误 - “在 'System.Windows.Baml2006.TypeConverterMarkupExtension' 上提供值引发异常。”
【发布时间】:2010-03-08 16:43:27
【问题描述】:

我刚刚开始尝试使用 WPF 模板与样式,但我不确定我做错了什么。下面的目标是交替菜单中选项的颜色。该代码仅适用于 .

>在“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>

我做错了什么?

【问题讨论】:

  • 如果异常包含行号会很方便...

标签: wpf templates visual-studio-2010 binding


【解决方案1】:

今天是星期一...

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

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

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

【讨论】:

  • 这里是WPF的新手,确实是一个可怕的错误信息
【解决方案2】:

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

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

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

【讨论】:

  • 我的类似,但因为我使用的是 Button Command="CommandName" 而不是 Command="{Binding Path=CommandName}"。
【解决方案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;component 需要更正为 /DSP%20-%20Filter;component 在我的例子中。

    【讨论】:

      【解决方案5】:

      Assigning Width="*" on Grid 给了我错误,第一次看起来很奇怪,但它想说的是标记无法转换为实际类型。

      【讨论】:

        【解决方案6】:

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

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

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

        因此,尽管 XAML 可以在“设计”视图中向我显示图像 - 我在运行时遇到了这个异常。 傻一个。

        【讨论】:

          【解决方案7】:

          在我的 BorderBrush 中使用灰色而不是灰色时,我遇到了同样的错误

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

          而不是

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

          【讨论】:

            【解决方案8】:

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

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

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

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

            【讨论】:

              【解决方案9】:

              当我忘记大括号时,我也有同样的情况:

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

              【讨论】:

                【解决方案10】:

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

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

                LinkBut​​ton 应该是 LinkBut​​tonStyle

                【讨论】:

                  【解决方案11】:

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

                  我有这个...

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

                  但我需要这个...

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

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

                  【讨论】:

                    【解决方案12】:

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

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

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

                    【讨论】:

                      猜你喜欢
                      • 1970-01-01
                      • 2012-10-01
                      • 1970-01-01
                      • 1970-01-01
                      • 2010-12-29
                      • 2016-05-24
                      • 2012-04-17
                      • 2011-04-23
                      • 2019-01-26
                      相关资源
                      最近更新 更多