首页 > 解决方案 > C# WPF 中的错误:“System.Windows.Style”不是属性“System.Windows.Controls.Control.Template”的有效值

问题描述

我正在使用 WPF MVVM 模式,并在MainViewResource.xaml.

正常情况下是没有问题的,但是当Slider包含在 中时Control,会出现以下错误。

“System.Windows.Style”不是属性“System.Windows.Controls.Control.Template”的有效值。

运行应用程序没有问题,但Control不显示在 xaml 屏幕上。

MainViewResource.xaml

<Style TargetType="{x:Type Slider}" x:Key="SLD.INPUT">
    ...
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Slider}">
                <ControlTemplate.Resources>
                    ...
                </ControlTemplate.Resources>
                <Border x:Name="border" Style="{StaticResource IN.BORDER.01}">
                    <Grid Style="{StaticResource IN.GRID}">
                        <DockPanel Style="{StaticResource IN.DOCK}">
                            <Border x:Name="PART_SelectionRange" Style="{StaticResource IN.BORDER.02}">
                                <Rectangle x:Name="sliderBar" Style="{StaticResource IN.RTG.01}"/>
                            </Border>
                            <Border Style="{StaticResource IN.BORDER.02}">
                                <Rectangle x:Name="PART_NegativeSelection" Style="{StaticResource IN.RTG.02}"/>
                            </Border>
                        </DockPanel>
                        <Track x:Name="PART_Track">
                            <Track.Thumb>
                                <Thumb x:Name="thumb" Style="{StaticResource IN.THUMB}"/>
                            </Track.Thumb>
                        </Track>
                    </Grid>
                </Border>
                <ControlTemplate.Triggers>
                    <DataTrigger Binding="{Binding ElementName=thumb, Path=IsMouseOver}" Value="true">
                        <Setter TargetName="sliderBar" Property="Fill" Value="{StaticResource LGB.SLD.FG.OVER}"/>
                    </DataTrigger>
                    <DataTrigger Binding="{Binding ElementName=thumb, Path=IsDragging}" Value="true">
                        <Setter TargetName="sliderBar" Property="Fill" Value="{StaticResource LGB.SLD.FG.DRAG}"/>
                    </DataTrigger>
                    <Trigger Property="IsEnabled" Value="false">
                        <Setter TargetName="PART_SelectionRange" Property="Visibility" Value="Collapsed"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

<Style TargetType="{x:Type Control}" x:Key="CTL.INPUT">
    <Setter Property="Grid.Row" Value="1"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type Control}">
                <ControlTemplate.Resources>
                    <Style TargetType="{x:Type TextBlock}" x:Key="IN.CONTENT">
                        ...
                        <Setter Property="Text" Value="{Binding ElementName=slider2, Path=Value, Converter={StaticResource StringFormatConverter}}"/>
                    </Style>
                </ControlTemplate.Resources>
                <Grid>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="*"/>
                    </Grid.ColumnDefinitions>
                    <Slider x:Name="slider2" Style="{StaticResource SLD.INPUT}"/>  // I guess here is the problem.
                    <TextBlock Style="{StaticResource IN.CONTENT}"/>
                </Grid>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

主窗口.xaml

<Control Style="{StaticResource CTL.INPUT}"/>

xaml 屏幕不显示任何内容,如下所示...

但是,在执行时,控件会正确显示。
在此处输入图像描述

MainViewResource.xaml用 正确注册了App.xaml,其他控件的样式没问题。仅在将 Slider 的自定义样式用作StaticResource. 有谁知道我错过了什么?

标签: c#wpfxaml

解决方案


推荐阅读