WPF添加新滑块样式导致XamlParseException

WPF添加新滑块样式导致XamlParseException,wpf,slider,styles,Wpf,Slider,Styles,我找到了要添加的滑块样式 我在我的窗口中添加了所有3种样式。参考资料,并在第一种样式中添加了2个模板: <Style TargetType="{x:Type Slider}"> <Setter Property="FocusVisualStyle" Value="{StaticResource MyFocusVisualStyte}" /> <Setter Property="SnapsToDevicePixels" Valu

我找到了要添加的
滑块
样式

我在我的
窗口中添加了所有3种样式。参考资料
,并在第一种样式中添加了2个模板:

    <Style TargetType="{x:Type Slider}">
        <Setter Property="FocusVisualStyle" Value="{StaticResource MyFocusVisualStyte}" />
        <Setter Property="SnapsToDevicePixels" Value="true" />
        <Setter Property="OverridesDefaultStyle" Value="true" />
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Slider}">
                    <Grid Margin="5">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="Auto" />
                            <ColumnDefinition Width="Auto" MinWidth="{TemplateBinding MinWidth}"/>
                            <ColumnDefinition Width="Auto"/>
                        </Grid.ColumnDefinitions>
                        <TickBar x:Name="TopTick" Visibility="Collapsed" Fill="LightGray" Placement="Left" SnapsToDevicePixels="True"
             Width="4" Margin="0,0,2,0" />
                        <Border x:Name="TrackBackground"
            Grid.Column="1"
            Margin="0,10"
            BorderThickness="2"
            BorderBrush="LightGray"
            HorizontalAlignment="Center" Width="4" />
                        <Track x:Name="PART_Track" Grid.Column="1">
                            <Track.DecreaseRepeatButton>
                                <RepeatButton Command="{x:Static Slider.DecreaseLarge}"  Style="{StaticResource SliderRepeatButtonStyle}" />
                            </Track.DecreaseRepeatButton>
                            <Track.IncreaseRepeatButton>
                                <RepeatButton Command="{x:Static Slider.IncreaseLarge}" Style="{StaticResource SliderRepeatButtonStyle}"/>
                            </Track.IncreaseRepeatButton>
                            <Track.Thumb>
                                <Thumb x:Name="Thumb" Style="{StaticResource SliderThumbStyle}" />
                            </Track.Thumb>
                        </Track>
                        <TickBar x:Name="BottomTick" Grid.Column="2" Visibility="Collapsed" Fill="LightGray" Placement="Right"
             Width="4" Margin="2,0,0,0" SnapsToDevicePixels="True" />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="TickPlacement" Value="TopLeft">
                            <Setter TargetName="TopTick" Property="Visibility" Value="Visible" />
                        </Trigger>
                        <Trigger Property="TickPlacement" Value="BottomRight">
                            <Setter TargetName="BottomTick" Property="Visibility" Value="Visible" />
                        </Trigger>
                        <Trigger Property="TickPlacement" Value="Both">
                            <Setter TargetName="TopTick" Property="Visibility" Value="Visible" />
                            <Setter TargetName="BottomTick" Property="Visibility" Value="Visible" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Slider}">
                    <Grid Margin="5">
                        <Grid.RowDefinitions>
                            <RowDefinition Height="Auto" />
                            <RowDefinition Height="Auto" MinHeight="{TemplateBinding MinHeight}"/>
                            <RowDefinition Height="Auto"/>
                        </Grid.RowDefinitions>
                        <TickBar x:Name="TopTick" Visibility="Collapsed" Fill="LightGray" Placement="Top" SnapsToDevicePixels="True"
             Height="4" Margin="0,0,0,2" />
                        <Border x:Name="TrackBackground"
            Grid.Row="1"
            Margin="10,0"
            BorderThickness="2"
            BorderBrush="LightGray"
            VerticalAlignment="Center" Height="4" />
                        <Track x:Name="PART_Track" Grid.Row="1">
                            <Track.DecreaseRepeatButton>
                                <RepeatButton Command="{x:Static Slider.DecreaseLarge}"  Style="{StaticResource SliderRepeatButtonStyle}" />
                            </Track.DecreaseRepeatButton>
                            <Track.IncreaseRepeatButton>
                                <RepeatButton Command="{x:Static Slider.IncreaseLarge}" Style="{StaticResource SliderRepeatButtonStyle}"/>
                            </Track.IncreaseRepeatButton>
                            <Track.Thumb>
                                <Thumb x:Name="Thumb" Style="{StaticResource SliderThumbStyle}" />
                            </Track.Thumb>
                        </Track>
                        <TickBar x:Name="BottomTick" Grid.Row="2" Visibility="Collapsed" Fill="LightGray" Placement="Bottom"
             SnapsToDevicePixels="True" Height="4" Margin="0,2,0,0"/>
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="TickPlacement" Value="TopLeft">
                            <Setter TargetName="TopTick" Property="Visibility" Value="Visible" />
                        </Trigger>
                        <Trigger Property="TickPlacement" Value="BottomRight">
                            <Setter TargetName="BottomTick" Property="Visibility" Value="Visible" />
                        </Trigger>
                        <Trigger Property="TickPlacement" Value="Both">
                            <Setter TargetName="TopTick" Property="Visibility" Value="Visible" />
                            <Setter TargetName="BottomTick" Property="Visibility" Value="Visible" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
        <Style.Triggers>
            <Trigger Property="Orientation" Value="Horizontal">
                <Setter Property="MinWidth" Value="104" />
                <Setter Property="MinHeight" Value="21" />
                <Setter Property="Template" Value="{StaticResource HorizontalSlider}" />
            </Trigger>
            <Trigger Property="Orientation" Value="Vertical">
                <Setter Property="MinWidth" Value="21" />
                <Setter Property="MinHeight" Value="104" />
                <Setter Property="Template" Value="{StaticResource VerticalSlider}" />
            </Trigger>
        </Style.Triggers>
    </Style>
    <Style TargetType="{x:Type RepeatButton}">
        <Setter Property="OverridesDefaultStyle" Value="true"/>
        <Setter Property="IsTabStop" Value="false"/>
        <Setter Property="Focusable" Value="false"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type RepeatButton}">
                    <Rectangle Fill="Transparent"/>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style TargetType="{x:Type Thumb}">
        <Setter Property="OverridesDefaultStyle" Value="True"/>
        <Setter Property="Template">
            <Setter.Value>
                <ControlTemplate TargetType="{x:Type Thumb}">
                    <Grid>
                        <Border Name="outerBorder"
                        Background="#5534b4e3"
                        BorderBrush="#5534b4e3"
                        Height="26" Width="26" Opacity="1" BorderThickness="2" CornerRadius="13"/>
                        <Border Name="innerBorder"
                        Background="#FF34b4e3"
                        BorderBrush="#FF34b4e3"
                        Height="10" Width="10" CornerRadius="5" Opacity="1" />
                    </Grid>
                    <ControlTemplate.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter TargetName="outerBorder" Property="BorderBrush" Value="#BB34b4e3" />
                        </Trigger>
                        <Trigger Property="IsEnabled" Value="False">
                            <Setter TargetName="outerBorder" Property="Background" Value="#55ACACAC" />
                            <Setter TargetName="outerBorder" Property="BorderBrush" Value="#55ACACAC" />
                            <Setter TargetName="innerBorder" Property="Width" Value="4" />
                            <Setter TargetName="innerBorder" Property="Height" Value="4" />
                            <Setter TargetName="innerBorder" Property="CornerRadius" Value="2" />
                        </Trigger>
                    </ControlTemplate.Triggers>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
    <Style x:Key="MyFocusVisualStyte" >
        <Setter Property="Control.Template">
            <Setter.Value>
                <ControlTemplate>
                    <Rectangle x:Name="FocusStyle" StrokeDashArray="4 4" RadiusX="5" RadiusY="5" Fill="Transparent"
                       Stroke="#99029cc7" StrokeThickness="1" />
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>
我有错误:无法解析资源
MyFocusVisualStyte
。 在添加
滑块之后:

<Slider Margin="454,122,0,543" />

我可以在设计器中看到此
滑块

<Slider Margin="454,122,0,543" />

但是当我要运行我的应用程序时,我有
XamlParseException

类型的第一次机会例外 中出现“System.Windows.Markup.XamlParseException” PresentationFramework.dll

其他信息:'的初始化 “System.Windows.Controls.Slider”引发异常。“行号” “921”和行位置“17”

我做错了什么


这些样式通过静态资源引用其他样式和模板:MyFocusVisualStyte(打字错误?是否应该是MyFocusVisualStyle?)、SliderThumbStyle、SliderRepeatButtonStyle、HorizontalSlider、VerticalSlider

所有这些样式和模板必须存在并在使用前定义

在这种情况下,必须按此顺序定义资源(我将仅复制每个资源的第一个节点,以及引用其他样式或模板的部分,以解释为什么顺序很重要):

首先,聚焦视觉风格、拇指风格和重复按钮风格。这些样式没有引用其他资源,因此可以先安全地定义它们:

<Style x:Key="MyFocusVisualStyte" >
    ...

<Style x:Key="SliderThumbStyle" TargetType="{x:Type Thumb}">
    ...

<Style x:Key="SliderRepeatButtonStyle" TargetType="{x:Type RepeatButton}">
    ...

...
...
...
然后,选择水平和垂直滑块模板。内部的重复按钮和拇指使用上述样式,因此它们必须在以下样式之后定义:

<ControlTemplate x:Key="HorizontalSlider" TargetType="{x:Type Slider}">
    ...
    <Track x:Name="PART_Track" Grid.Row="1">
        <Track.DecreaseRepeatButton>
            <RepeatButton Command="{x:Static Slider.DecreaseLarge}"
                          Style="{StaticResource SliderRepeatButtonStyle}" />
        </Track.DecreaseRepeatButton>
        <Track.IncreaseRepeatButton>
            <RepeatButton Command="{x:Static Slider.IncreaseLarge}"
                          Style="{StaticResource SliderRepeatButtonStyle}"/>
        </Track.IncreaseRepeatButton>
        <Track.Thumb>
            <Thumb x:Name="Thumb" Style="{StaticResource SliderThumbStyle}" />
        </Track.Thumb>
    </Track>
    ...

<ControlTemplate x:Key="VerticalSlider" TargetType="{x:Type Slider}">
    ...
    <Track x:Name="PART_Track" Grid.Column="1">
        <Track.DecreaseRepeatButton>
            <RepeatButton Command="{x:Static Slider.DecreaseLarge}"
                          Style="{StaticResource SliderRepeatButtonStyle}" />
        </Track.DecreaseRepeatButton>
        <Track.IncreaseRepeatButton>
            <RepeatButton Command="{x:Static Slider.IncreaseLarge}"
                          Style="{StaticResource SliderRepeatButtonStyle}"/>
        </Track.IncreaseRepeatButton>
        <Track.Thumb>
            <Thumb x:Name="Thumb" Style="{StaticResource SliderThumbStyle}" />
        </Track.Thumb>
    </Track>
    ...

...
...
...
...
最后是滑块样式本身,它引用这两个模板(和FocusVisual样式)。您可以不使用x:键保留此滑块,因此默认情况下所有滑块都使用该样式:

<Style TargetType="{x:Type Slider}">
    <Setter Property="FocusVisualStyle" Value="{StaticResource MyFocusVisualStyte}" />
    ...
    <Trigger Property="Orientation" Value="Horizontal">
        ...
        <Setter Property="Template" Value="{StaticResource HorizontalSlider}" />
    </Trigger>
    <Trigger Property="Orientation" Value="Vertical">
        ...
        <Setter Property="Template" Value="{StaticResource VerticalSlider}" />
    </Trigger>
    ...

...
...
...
...

第二行:
myfocusvisualty>>tOk,检查了样式原始来源的链接,我发现这不是你的打字错误。。。但是检查一下名字,以防万一@mot rer-检查内部异常。它会告诉你你的XAML文件的确切错误。哇,我被整个东西的风格弄糊涂了!你能得到一个代码示例吗?(我希望我的所有滑块都具有相同的外观)我认为您的问题在于您删除了
RepeatButton
Thumb
样式的
x:Key
。这打破了风格。不过,从
滑块
样式中删除它可能是安全的,而且很有可能足以实现您想要的效果。如果您注意,您将看到您删除的x:键(例如,SliderRepeatButtonStyle
)正在被其他模板使用。这些引用(通过StaticResource)现在不起作用,并引发异常。此外,样式和模板的定义顺序也很重要。如果样式X使用模板Y,则必须首先在代码中定义Y。在这种情况下,其顺序与网站中的显示方式有些相反:FocusVisual Style>Thumb Style>RepeatButton Style>水平和垂直滑块模板>,最后是滑块样式。我将此键添加回需要放置最后一个样式的位置?(FocusVisualStyte)因为我可以看到在x:Key=“SliderStyle”样式中无法解析资源MyFocusVisualStyte