应用样式后UserControl未显示

时间:2017-03-29 01:17:19

标签: c# wpf

我正在制作一个usercontrol图书馆。因此,我没有app.xaml个文件,也没有mainwindow.xaml

我从另一个WPF项目导入(复制)了一个滑块样式。此resource dictionary设置为page并且之前工作正常但是,只要我将其应用到滑块,控件就不会在VisualStudio和运行时显示。没有错误。

<UserControl x:Class="WPF.UserControls.CustomSlider"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:WPF.UserControls"
         x:Name="CustomSliderControl"
         mc:Ignorable="d" 
         d:DesignHeight="407" d:DesignWidth="127">
<UserControl.Resources>
    <ResourceDictionary Source="/WPFUserControls;component/Styles/BaseSliderStyle.xaml"/>
</UserControl.Resources>
<Grid>
    <Slider x:Name="Hello" Style="{DynamicResource BaseSliderStyle}" Value="{Binding Value, Mode=TwoWay, 
RelativeSource={RelativeSource AncestorType={x:Type local:CustomSlider}}}" Minimum="0.0" Maximum="1.0"/>
</Grid>

这是滑块样式的一部分:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
                xmlns:local="clr-namespace:WPF.UserControls">
<Style x:Key="BaseSliderStyle" TargetType="{x:Type Slider}">
    <Setter Property="Stylus.IsPressAndHoldEnabled" Value="false"/>
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="BorderBrush" Value="Transparent"/>
    <Setter Property="Foreground" Value="{StaticResource SliderThumb.Static.Foreground}"/>
    <Setter Property="Template" Value="{StaticResource SliderHorizontal}"/>
    <Style.Triggers>
        <Trigger Property="Orientation" Value="Vertical">
            <Setter Property="Template" Value="{StaticResource SliderVertical}"/>
        </Trigger>
    </Style.Triggers>
</Style>

我可能会错过一些东西。任何提示?

感谢。

1 个答案:

答案 0 :(得分:1)

确保您已添加对WPFUserControls.dll的引用并尝试此操作:

<UserControl ...>
    <UserControl.Resources>
        <ResourceDictionary>
            <ResourceDictionary.MergedDictionaries>
                <ResourceDictionary Source="pack://application:,,,/WPFUserControls;component/Styles/BaseSliderStyle.xaml"/>
            </ResourceDictionary.MergedDictionaries>
        </ResourceDictionary>
    </UserControl.Resources>
    <Grid>
        <Slider x:Name="Hello" Style="{StaticResource BaseSliderStyle}" Value="{Binding Value, Mode=TwoWay, 
                    RelativeSource={RelativeSource AncestorType={x:Type local:CustomSlider}}}" Minimum="0.0" Maximum="1.0"/>
    </Grid>
</UserControl>

由于我使用StaticResource标记扩展名,因此如果找不到“BaseSliderStyle”,则会出现异常。当您确认已找到样式并正在按预期应用样式时,可以切换回使用DynamicResource

另请注意,我使用合并的ResourceDictionary和包URI来指定来源:https://msdn.microsoft.com/en-us/library/aa970069(v=vs.110).aspx

还请确保资源字典实际上名为“BaseSliderStyle.xaml”,并且位于名为“WPFUserControls”的项目/程序集根目录下名为“样式”的文件夹下。