WPF 템플릿 오류 - " 'System.Windows.Baml2006.TypeConverterMarkupExtension'에 값을 제공하면 예외가 발생했습니다."


Answers

오이 월요일이야 ...

다른 컨트롤에서 색 문자열을 붙여 넣을 때이 접두사에 두 개의 "##"을 붙여 넣습니다.

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

여전히 치사한 오류 메시지.

Question

방금 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>

내가 도대체 ​​뭘 잘못하고있는 겁니까?




다른 사람들과 마찬가지로 -이 끔찍한 오류 메시지는 내 xaml에 구문 오류가 있음을 의미합니다.

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

내가 높이 값을 채우지 않았 음을 주목하라.




다음은이 오류의 또 다른 예이며 해결 방법은 다음과 같습니다.

이것은 내 프로젝트를 VS2010에서 VS2012 및 VS2013으로 업그레이드하여 발생한 것으로 보입니다. 확실하지 왜 그것이 여기에 문제가 될 것이지만 나는 그것이라고 생각한다.

Visual Studio 마법사를 개발하여 매우 큰 솔루션 (300 개 이상의 프로젝트)에 프로젝트를 추가하는 프로세스를 자동화했습니다. 개발자가 프로젝트를 유지 관리하는 데 필요한 추가 요구 사항이 있기 때문입니다. 마법사를 위해 WPF를 사용했고 VS2010에서 잘 작동했습니다. 프로젝트를 VS2012 및 VS2013으로 업그레이드했으며이 오류가 발생하기 시작했습니다. 어떤 시점에서 내 아이콘과 이미지 파일의 경로가 망가 졌다고합니다. XAML에서 직접 수정 한 내용을 수정하면 오류가 표시되지 않습니다.

리소스를 참조하는 데 도움이 필요할 수있는 경우 - 문제를 해결하는 데 사용한 게시물 입니다. XAML에서 아이콘 리소스 파일 참조를 참조하는 방법




나는 중괄호를 잊어 버렸을 때도 똑같이했다.

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



같은 오류가 발생했습니다 :

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

BorderThickness에 숫자를 넣어 고정




다른 사람들과 달리 XAML 구문이 정확했습니다.

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

이 오류는 이미지를 변경했을 때 나타났습니다. 나중에 폴더의 이미지를 변경했지만 내 프로젝트에 이미지를 포함 하는 것을 잊었습니다.

따라서 XAML에서 'Desgn'보기의 이미지를 표시 할 수 있지만이 예외는 @ 런타임입니다. 어리석은 사람.




동일한 오류가 있었지만 리소스 폴더의 이미지에 잘못된 경로가 사용되었습니다.

나는 이것을 가지고 있었다. ..

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

하지만 나는 이것을 필요로했다 ...

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

처음에 한 폴더로 돌아가려면 ../를 추가해야했습니다.




비슷한 오류 메시지가 무한대로 표시되는 버그를 수정해야했습니다. 다음과 같은 문제로 인해 문제가 발생한다는 사실을 알았을 때 조금 실망했습니다 (더 복잡하고 큰 재앙이 예상되었습니다).

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

여기서 LinkButtonLinkButtonStyle 이어야합니다.




제 경우에는 프로젝트 이름을 변경했습니다. 이 오류가 발생하면. 이미지를 다시 선택하고 이미지의 리소스 이름도 변경해야한다는 것을 알았습니다.

        <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 구성 요소로 수정해야합니다.




내 BorderBrush에서 회색 대신 회색을 사용할 때도 같은 오류가 발생했습니다.

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

대신에

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



Grid에 Width = "*"를 지정하면 오류가 발생했습니다. 처음에는 이상하게 보였지만 실제로 말하려고하는 것은 마크 업을 실제 유형으로 변환 할 수 없다는 것입니다.