WPF 资源xxx具有不兼容的类型

=_=这其实是一个低级错误。。。可是最后还是我同事帮我发现的,很是惭愧,决定写一篇随笔用于记录。。。

引用的地方是这样写的:

 

 请注意他这边是Template="***";

那么你资源文件中正确的写法应该是:

    <!--textbox样式-->
    <ControlTemplate x:Key="TextBoxTemplate1" TargetType="{x:Type TextBox}">
        <Border x:Name="Bd" 
                    BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}"  
                    Background="{TemplateBinding Background}" 
                    CornerRadius="5">
            <ScrollViewer x:Name="PART_ContentHost"/>
        </Border>
        <ControlTemplate.Triggers>
            <Trigger Property="IsEnabled" Value="False">
                <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
            </Trigger>
            <Trigger Property="IsMouseOver" Value="True">
                <Setter Property="BorderBrush" TargetName="Bd" Value="#FF4176D3"/>
                <Setter Property="BorderThickness" TargetName="Bd" Value="1"/>
                <Setter Property="Foreground" Value="#FF4176D3"/>
            </Trigger>

        </ControlTemplate.Triggers>
    </ControlTemplate>

如果你把这个控件模板包在style里面就是这样写:

<Style x:Key="TextBoxTemplate1" TargetType="{x:Type TextBox}">
        <Setter Property="Template">
            <Setter.Value>
                <!--textbox样式-->
                <ControlTemplate>
                    <Border x:Name="Bd" 
                    BorderBrush="{TemplateBinding BorderBrush}" 
                    BorderThickness="{TemplateBinding BorderThickness}"  
                    Background="{TemplateBinding Background}" 
                    CornerRadius="5">
                        <ScrollViewer x:Name="PART_ContentHost"/>
                    </Border>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter Property="Background" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.ControlBrushKey}}"/>
                            <Setter Property="Foreground" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                        </Trigger>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="BorderBrush" TargetName="Bd" Value="#FF4176D3"/>
                            <Setter Property="BorderThickness" TargetName="Bd" Value="1"/>
                            <Setter Property="Foreground" Value="#FF4176D3"/>
                        </Trigger>

                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

就会报错。。。原因很简单你的样式文件是个style,而你引用的地方是个Template,层级关系不一样了。。。所以报错

posted @ 2022-01-21 15:05  苏州の酱醋茶  阅读(1353)  评论(0编辑  收藏  举报