如何在派生的UserControl类中拥有StaticResource

本文关键字:拥有 StaticResource UserControl 派生 | 更新日期: 2023-09-27 18:09:10

我有以下问题。我有一个类,它派生自UserControl,下面是代码:

public partial class MyUC : UserControl
{
[...]
    public bool IsFlying { get { return true; } }
[...]
}    

我想使用一个样式,它是为MyUC类创建的,下面是样式代码。它位于App.Xaml:

xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:dc="clr-namespace:MyNamespace"
<Application.Resources>
    <Style x:Key="mystyle" TargetType="dc:MyUC ">
        <Style.Triggers>
            <Trigger Property="IsFlying" Value="true">
                <Setter Property = "Background" Value="Blue"/>
            </Trigger>
        </Style.Triggers>
    </Style>
</Application.Resources>

正如你所看到的,我想使用我在MyUC中声明的属性。问题是,当我试图向控件添加样式时,出现错误。

<UserControl x:Class="MyNamespace.MyUC"
         [...]
         Style="{StaticResource mystyle}"> 
<UserControl.Resources>
</UserControl.Resources>
</UserControl>
'MyUC' TargetType不匹配元素'UserControl'的类型。

据我所知,编译器不识别类MyUC派生自UserControl。如何解决这个问题?

提前感谢!

如何在派生的UserControl类中拥有StaticResource

错误可能只在design时间,它应该在runtime工作良好。运行你的应用程序,看看它是否适合你。

此外,你的触发器不会为normal CLR property工作,你需要使其为Dependency Property -

    public bool IsFlying
    {
        get { return (bool)GetValue(IsFlyingProperty); }
        set { SetValue(IsFlyingProperty, value); }
    }
    public static readonly DependencyProperty IsFlyingProperty =
        DependencyProperty.Register("IsFlying", typeof(bool), 
           typeof(SampleUserControl), new UIPropertyMetadata(true));

还可以从样式声明中删除x:Key="mystyle"。它会自动应用到你的UserControl.

这样你就不必在UserControl上显式地设置style了。这一行就不需要了- Style="{StaticResource mystyle}"